C语言编程在Xcode中Scanf 输入跳过以及清空键盘缓冲区总结

来源:互联网 发布:影响二次销售 淘宝介入 编辑:程序博客网 时间:2024/05/16 04:46


当有多个scanf接收输入的时候,一般都要在一个scanf执行完成后进行缓冲区清空,否则如果上次输入存在不符合规则的输入时,就会出现数据残留,不会被利用完全,这时后面的scanf会跳过,自动接收键盘缓冲区无效字符!!

 

清空键盘缓冲区很多种方法:

如用fflush(stdin);等,但是在linux和苹果MAC电脑Xcode上这些都不起作用;

 

以下是个人总结在Xcode7.3总能够清空键盘缓冲区的 六种 方法:

//清除scanf缓存区的内容;直接在每个scanf()之后写入,就行!!

//    scanf("%*[^\n]");     //方法一

//    setbuf(stdin, NULL);  //方法二

//    while(getchar() != '\n') continue;  //方法三

//    rewind(stdin);        //方法四

//定义要输入的变量 //方法五

char charValue2;

while ( (charValue2 = getchar()) != '\n'&& charValue2 != EOF); //方法五

scant("%c",charValue2);


// 利用一个不用的缓冲区来接收键盘缓冲区;//方法六

#define BUFMAX 256 //定义缓冲区中滞留的字符数最大值

char buftemp[BUFMAX];//用于存取缓冲区的字符

//在每一个scanf之后加上

gets(buftmp);

//读取缓冲区无效字符,不做处理,即可丢弃

 




其他网友

scanf("%[^\n]%*c",str);//读入一行字符串

%*c的作用是读入\n

"*"表示该输入项读入后不赋予任何变量,即跳过该输入值。

^表示"",即读入其后面的字符就结束读入。

 

于是,有了另一种改法:把所有的scanf()全用上面那中形式,即

scanf("%[^\n]%*c",str);就行了


参考:C语言编程—清空键盘缓冲区,Linux和Windows下完美实现

http://www.ludou.org/c-clear-buffer-area.html

 

参考:C语言编程的时候清除缓存总结http://blog.chinaunix.net/uid-27183448-id-3370623.html

 

参考:http://blog.chinaunix.net/uid-27183448-id-3370623.html

 


1 0
原创粉丝点击