C语言清空输入缓存区的几个方法

办法一:

1 scanf("%d", value);
2 setbuf(stdin, NULL);

将 stdin 输入流由默认缓冲区转为无缓冲区。这样 scanf() 输入完毕后,缓冲区内的东西就消失了。

办法二:

1 while ((c = getchar()) != EOF && c != ‘\n‘);

使用 getchar() 不断获得缓冲区内的内容,直到缓冲区空为止。建议使用这种方法

办法三:

1 fflush(stdin);

这种方法不在C和C++标准定义里,并非所有编译器都支持这个函数(例如Linux下的GCC就不支持),所以代码的可扩展性较差。

原文地址:https://www.cnblogs.com/wildcardo/p/12183415.html

时间: 2024-08-29 21:02:13

C语言清空输入缓存区的几个方法的相关文章

c语言:C语言清空输入缓冲区在标准输入(stdin)情况下的使用

C语言清空输入缓冲区在标准输入(stdin)情况下的使用 程序1: //功能:先输入一个数字,再输入一个字符,输出hello bit #include <stdio.h> int main() { int num = 0; char ch = ' '; scanf("%d", &num); scanf("%c", &ch); printf("hello bit\n"); system("pause"

C语言清空输入缓冲区的N种方法对比(转)

C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); //获取行系列 char *fgets(char * restrict s, int n, FILE * restrict stream); char *gets(char *s);//可能导致溢出,用fgets代替之. //格式化输入系列 int fscanf(FILE * restrict stream, co

C语言编程之--scanf()函数与getchar()函数搭配来理解C程序的输入缓存(buffer)

博主最近在学习C语言编程,在书中的代码示例中出现了下面的代码段: #include<stdio.h> int main() { char a[5]; int i; printf("请依次输入值:\n"); for(i=0;i<5;i++) { scanf("%c",&a[i]); getchar(); //为什么要加一个getchar()? } printf("\n"); for(i=0;i<5;i++) { pr

关于arduino清空串口缓存(转)

在arduino1.0之前的版本 Serial.flush()的作用是是清空串口缓存( dropping received incoming data).但在1.0之后的版本 Serial.flush()的作用调整为了等待串口数据传送完毕(Waits for the transmission of outgoing serial data to complete.)(引用自http://arduino.cc/en/Serial/Flush). 因为我在使用wifibee的过程中,如果既想用Ser

ACM/ICPC 之 优先级队列+设置IO缓存区(TSH OJ-Schedule(任务调度))

一个裸的优先级队列(最大堆)题,但也有其他普通队列的做法.这道题我做了两天,结果发现是输入输出太过频繁,一直只能A掉55%的数据,其他都是TLE,如果将输入输出的数据放入缓存区,然后满区输出,可以将IO时间消耗降到很低. 任务调度(Schedule) 描述 某高性能计算集群(HPC cluster)采用的任务调度器与众不同.为简化起见,假定该集群不支持多任务同时执行,故同一时刻只有单个任务处于执行状态.初始状态下,每个任务都由称作优先级数的一个整数指定优先级,该数值越小优先级越高:若优先级数相等

JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder

JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringBuffer概述 关于StringBuffer这个对象,Buffer是什么意思?缓冲区的意思,String一旦初始化时不可以被改变的,而StringBuffer是可以的,这就是区别,特点: StringBuffer是一个容器 可以字节操作多个数据类型 最终会通过toString方法变成字符串 存储 S

缓存区溢出攻击实验(3)

缓存区溢出攻击实验(3) 本实验预计分 3 个小实验来做,本文是第三个实验. 缓存区溢出攻击实验(1) 缓存区溢出攻击实验(2) 缓存区溢出攻击实验(3) 本实验跪谢大神 YSunLIN 的帮助与指导 ~ 不保证成功,一切皆有可能 ~ 背景介绍 请参照实验(1)(2). 实验目的 最终目的:只给一个需要输入正确的序列号才能验证通过的exe可执行文件,要求在不知道源代码的情况下利用缓存区溢出攻击来破解该exe文件. 注意!!! 不知道源代码的情况下 不知道源代码的情况下 不知道源代码的情况下 现实

【缓存区】ByteBuffer和IOBuffer你要了解的常用知识

mina中IOBuffer是Nio中ByteBuffer的衍生类,主要是解决Bytebuffer的两个不足,1.不能自动扩展容量 2.提供更加丰富的数据类型操作支持 1.先来学习下ByteBuffer你要了解的东西摘自 http://blackbeans.iteye.com/blog/836103这是一篇好文章,对ByteBuff讲的很清楚 查看ByteBuffer的API,看的我是一头雾水,搞不清什么mark.position.limit.flip.reset几个的用法,先看下面的例子: Ja

刷新缓存区方式和刷新内存到磁盘方式总结。

首先聊这个话题,我们先了解两个函数: 1.printf函数 2.write函数 一.首先了解缓冲区的概念,Linux下的缓冲区分为以下三种: 1.全缓冲,顾名思义,除非你主动刷新缓冲区,不然只能等到缓冲区满,才能刷新缓冲区.比如写入磁盘. 2.行缓冲,当遇到'\n'时,刷新缓冲区,比如 C库函数. 3.无缓冲,接受多少给多少,比如stderr. 今天主要讲述的是行缓冲,如果想在不使用'\n'的情况下刷新缓存区,有下列手段-- 1.fflush()函数. 函数原型:int fflush(FILE