C_and_CPP 板


LINE

自己碰到了才有感觉, scanf 比想像中还难。 後来找到 __fpurge(stdin) 终於清掉 stdin buffer。 __fpurge 是 linux 提供的。 linux man page 提到: For input streams associated with seekable files (e.g., disk files, but not pipes or terminals), 也许 stdin 不算是 seekable files 吧! 所以 fflush(stdin) 无效。 另外「C程式语言」B-4 提到 fflush 对於 input streams, 结果未定义 (undefined behavior)。出自 K&R, 相信够份量。 另外一个有可携性的作法就是把 stdin buffer 读出来丢掉。 int c; while ((c = getchar()) != '\n' && c != EOF); https://descent-incoming.blogspot.com/2022/03/c-scanf.html 一些 scanf 的心得。 ※ 引述《wtchen (没有存在感的人)》之铭言: : 使用Lubuntu + gcc 4.9.2 : 问题(Question): : 目前在练习file input/output : 有个疑问是如何不要让前面输入的Enter影响到後面 : 看了一下自己手上的书「边学边做C语言」是用fflush(stdin) : 不过我加进去以後根本没反应,输入完要求的char+Enter程式就直接跑到底 : 然後看了版友的建议用while(getchar()!='\n'); : (不过我不太懂,这边最後一个getchar()不是输入完要求的char打的'\n'吗?) : 可是的确有用,程式的确停下来叫我输入string : 稍微看了一下好像有些大大说不能用fflush(stdin) : 可是google一下发现很多人都在用 : 我自己对fflush的认识也是把之前输入到buffer里的清掉 : 还是我对fflush的认识有误? : 感谢各位协助。 : 程式同步分享在此: : https://gist.github.com/gnitnaw/ac3dbcd8fa8e11c515c8 : #include <stdio.h> : #define MAXSIZE 256 : void read_string(char* p); //可以用scanf或fgets替代,我两个都不满意所以自己写 : int main(void) { : char c, s[MAXSIZE]; : puts("I/O lib"); : puts(""); : printf("Please give me a char: "); : c = getchar(); : printf("What you keyin is %c\n", c); : fflush(stdin); : while(getchar()!='\n'); : printf("Please give me a string : "); : read_string(s); : printf("What you keyin is %s\n", s); : printf("\n Press <Enter> to continue..."); : while ((c=getchar()) != '\n'); : return 0; : } : void read_string(char* p) { : int i; : char c; : for (i=0; i<MAXSIZE-1; ++i) { : if ( (c=getchar()) != '\n' ) { : p[i] = c; : } else { : break; : } : } : p[i] = '\0'; : } -- 纸上得来终觉浅,绝知此事要躬行。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.217.135.250 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1647604378.A.411.html
1F:推 Schottky: 把 buffer 读出来丢光 +1 03/18 20:41
2F:推 wei115: 缓冲区有够难搞的= = 读出来丢掉真的是最可靠的 另外用 03/18 22:45
3F:→ wei115: %*[^\n]%*c比较炫泡 03/18 22:45
4F:→ wei115: 当初刷uva被缓冲区冲康很多次 03/18 22:46







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP