scanf这句时,系统并不是等待用户输入
2013-10-31 12:42
190 查看
#include <stdio.h> #define BUG puts("here"); int main() { setbuf(stdin, NULL); char a, b; while (scanf("%c%c", &a, &b) == 2) { printf("%c\n", a); BUG printf("%c\n", b); setbuf(stdin, NULL); } return 0; }
当我们的pc指向scanf这句时,系统并不是等待用户输入,而是判断输入缓冲区有没有符合格式的内容,如果有,则直接读取。
知道了这个,我就应该明白,scanf("%c",&ch);不是没有读到数据,而是读到了我们不知道的数据。
那问题又来了,它读到了什么??好吧,这就要说到行缓存;
我们用scanf()的时候都要按下enter键,那enter键按了之后去哪儿了??
好吧,问题基本应该知道了,enter键也进入了输入缓存区,也就是scanf("%c",&ch);
读到了'\n';
解决办法,很简单,既然缓存区有东西,那我们就清空它呗~~
setbuf(stdin,NULL);(这个windows和linux下都可以)
fflush(stdin);(这个只能windows);
相关文章推荐
- scanf这句时,系统并不是等待用户输入
- 输入单用户关于Linux(CentOS5.5)系统如何禁用单用户模式
- 黑马程序员之C#编程基础学习笔记:用while break实现要求用户输入用户名和密码,只要不是admin,888888就一直提示要求重新输入。
- Shell实现等待用户输入并设定缺省执行
- 订餐系统总结(一)验证用户输入
- UBUNTU系统关闭开机输入用户密码的方法
- XP系统登录界面,需要手动点击用户帐户后才会出现输入密码的界面
- 订餐系统总结(一)验证用户输入
- WinForm 点击按钮把用户输入的信息导入到Word并以系统时间命名 然后打开这个Word所在文件夹
- Windows XP 如何修改实现不输入用户密码而直接登录系统
- Linux下自动修改用户密码的方法(直接通过命令而不是在终端输入密码)
- c#如何实现一个线程暂停,等待用户输入文本后继续运行?
- 完成系统登录程序,从命令行输入用户名和密码,如果没有输入用户名和密码,则提示输入用户名和密码;如果输入了用户名但是没有输入密码,则提示用户输入密码,然后判断用户名是否是mldn,密码是否是hello,
- 使用缓冲流读取试题文件,每次显示试题文件中的一道题目。读取到字符“*”时候暂停读取,等待用户从键盘输入答案。用户做完全部题目后,程序给出用户的得分。Test.txt如下:
- 批处理如何做到等待用户输入一个值(dos命令行)
- 此方法用于确认用户输入的不是恶意信息
- Android用户输入系统和移植内容概要
- 完成系统登录程序,从命令行输入用户名和密码,如果没有输入用户名和密码,则提示输入用户名和密码;如果输入了用户名但是没有输入密码,则提示用户输入密码,然后判断用户名是否是mldn,密码是否是hello,
- [原创]在日文系统中使用JavaScript校验用户输入长度
- 安桌用户输入系统移植需注意的情况