PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 关于清空键盘缓冲区
楼主:
wei115
(ㄎㄎ)
2017-12-07 22:33:55
开发平台(Platform): (Ex: Win10, Linux, ...)
win10 + cygwin
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC 6.4.0
问题(Question):
我想要清空缓冲区
试过fflush(stdin)[非标准] 和 setbuf(stdin, NULL)[标准]
但我刚刚写的题目中却发现这两个都没在工作,缓冲区一样有东西没被清空
但我用GDB除错的时候就正常工作了....
最后我用scanf("%[^\n]*s"); getchar();就正常运作
直接用scanf("%[^\n]*s%*c"); 也有机率不工作
这是我对缓冲区有所误解以至于我错误使用这些功能吗?
还是这些函式没有竞争力,不懂什么叫做吃苦当吃补,都没在作功德
谢谢
作者:
cuteSquirrel
(松鼠)
2017-12-07 22:48:00
XD
作者:
galic
(嘎利)
2017-12-07 23:20:00
scanf("%[^\n]*s")的 "*s" !?为何不用通用的 while loop 配getchar 就好
楼主:
wei115
(ㄎㄎ)
2017-12-07 23:26:00
疴....比较短?
作者:
LPH66
(-6.2598534e+18f)
2017-12-08 02:35:00
回二楼, %[..]s 用来接受一个只含 [] 里字符的字串如果 [..] 以 ^ 开头就是接受不含这些字的字串然后那个 * 表示接受输入但不存进变量里咦等一下我好像弄错了, 好像要 "%*[^\n]" 才对...我试一下嗯, 确实是要 "%*[^\n]" 才对, [..] 的地位跟 %s 的 s 一样所以原 PO 原本的写法变成“收一个不含换行字串进变量,再收 * s 两个字”--但原 PO 没给位址所以是错的写法这也解释了为什么原 PO 接 %*c 会无法作用的原因因为在“收 * 字”的时候就炸掉了
作者:
alan23273850
2017-12-08 02:42:00
http://www.programmer-club.com.tw/ShowSameTitleN
/c/43591.html1. fflush只对stdout有定义,所以不可接stdin2. setbuf是设定接下来的缓冲区模式,并不会清空之前残留的缓冲区内容3. 网站内使用 scanf("%*[^\n]%*c");反正要清空stdin缓冲区要自己吃就对了,什么内建函式都不要用,免得debug底到一肚子气XD
作者:
Davinais
(水灵流喵)
2017-12-08 03:38:00
fflush不是拿来清stdin的,他在那里没有定义(茶
作者:
galic
(嘎利)
2017-12-08 10:43:00
c的标准没定义没错 但POSIX有定义所以回到原点 还是用while loop配getchar吧 XD
继续阅读
[问题] 字串比较问题
MrPanda
[问题] 高斯消去求反矩阵
j0958322080
[问题] 看不懂参考书上里面其中一段的内文
zzss2003
[讨论] 请版主帮我删文,不小心按到送出
zzss2003
[问题] 将现有的C++ lib档,再用C wrapper成dll
james999
[问题] 在thread里面free memory
Lipraxde
[问题] C++ 需要去上课学吗?
x246libra
[问题] makefile问题请益
lemonsheep
[问题] arduino感应式掀盖垃圾桶
Wjy5c1
Re: [问题] Object array在class里的宣告方法
hichcock
Links
booklink
Contact Us: admin [ a t ] ucptt.com