Re: [问题] 关于清除标准输入的缓冲区

楼主: LPH66 (-6.2598534e+18f)   2016-09-12 00:10:33
※ 引述《jacky1989 ()》之铭言:
: 前几天承蒙大神(LPH66)指导,说从标准输入装置输入资料时,清除缓冲区
: 改用
: char t;
: while((t=getchar())&(t!=EOF))
: 在输入时,是不是都要预先按一次Enter键,才能输入资料
: 不能像之前使用fflush(stdin),直接就可以输入资料?
所以这就是我这两句推文在说的:
→ LPH66: 因为之所以会"留有字符在输入里"几乎都是前一行没读完09/10 02:08
→ LPH66: 那就只要把前一行给读完就好, 而一行结束就是 '\n'09/10 02:09
平常若没有没读完的字符时是不需要这道手续的
在程式一开始当然是没有没读完的字符, 因此就不需要
而这道手续也并不是每个输入前都需要
大多数情形会需要它的时间只有当你有输入单个字符和输入其他变量混用的时候
这种状况下因为输入其他变量时
上一个输入之后的 '\n' 由于不属于该变量内容会留在输入串行里
因此后续在读字符时就会读进这个 '\n'
同样的状况也会发生在 gets, 它也会先吃到 '\n' 所以会读进一个空字串
C++ stream 也是一样的状况, 输入字符和输入其他变量混用时也会发生
跟 C 的 gets 对应的 getline 也是一样的
====
我会建议不要无脑地把清除放在所有输入前面
而是去了解你的输入顺序和它对输入串行的操作再决定要不要做清除
楼主: LPH66 (-6.2598534e+18f)   2015-09-10 02:08:00
因为之所以会"留有字符在输入里"几乎都是前一行没读完那就只要把前一行给读完就好, 而一行结束就是 '\n'

Links booklink

Contact Us: admin [ a t ] ucptt.com