getchar(实用干货|分享一个getchar技巧)

分享一个getchar()从缓冲区拿取字符的实例。 需求:循环输入一个字符‘y’,输出yes 循环输入一个字符‘n’,输出no 其他输入,输出input again 代码如下: #include <stdio.h> int m...

分享一个getchar()从缓冲区拿取字符的实例。

需求:循环输入一个字符‘y’,输出yes

循环输入一个字符‘n’,输出no

其他输入,输出input again

实用干货|分享一个getchar技巧

代码如下:

#include <stdio.h>

int main()

{

char ch;

while(1)

{

printf("输入字符\n");

printf("y: 输出yes n: 输出no 其他字符:输出 input again \n");

printf("请输入...\n");

ch = getchar();

if(ch == 'y')

printf("yes\n");

else if(ch == 'n')

printf("no \n");

else

printf("input again\n");

}

return 0;

}

结果运行时:输入 y后,打印出yes,紧跟着又打印出红色区域,才能进行下次输入。

输入n也是同样的现象。当输入其他更多字符时,打印红色区域次数也随之增多。

实用干货|分享一个getchar技巧

实用干货|分享一个getchar技巧

怎么解决呢?我们多次试验,发现与输入的内容多少有关,猜测是缓冲区内容所致。

经查看getchar()函数原型,它是从缓冲区拿一个字符,而不是拿走第一字符后,会清理缓冲区剩余字符。

所以当输入y后,字符y被拿走使用,但还有个“回车”在缓冲区,程序运行时继续拿到了“回车”,因此就多输入了红色区域,其他字符同理。

知道了根源,我们就好解决了。

方法一:

加入 fflush(stdin); 系统帮我们清空缓冲区,windows系统有效,Linux系统无效。

实用干货|分享一个getchar技巧

方法二:

加入 while((ch=getchar())!=’\n’) ;

判断拿到的字符是否到“回车”了,如果不是“回车”说明缓冲区内容还有,死循环等待拿取字符;如果是“回车”了,说明缓冲区内容已取完,跳出循环,进行程序正常运行。

实用干货|分享一个getchar技巧

  • 发表于 2022-10-30 12:56:43
  • 阅读 ( 142 )
  • 分类:热点

0 条评论

请先 登录 后评论

你可能感兴趣的文章

相关问题