作者d630200x (DOGE)
看板C_and_CPP
标题[问题] scanf的奇妙bug?
时间Tue Feb 26 15:37:12 2019
用的编译器是gcc
平台是linux
刚刚写一个无穷回圈
char word;
while(1)
{
printf("something\n");
scanf("%c", &word);
}
用%c的话,something一定会重复印两行才会给我输入word
但改成%s的话就又没这个bug了
请问这是甚麽问题?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.63.205.97
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1551166636.A.902.html
1F:→ nh60211as: 你有把word印出来看是什麽吗 02/26 16:08
2F:→ samuelcdf: &word 02/26 16:14
3F:→ samuelcdf: 如果是%s的话, 你对应的word应该会宣告阵列吧. 直接写 02/26 16:14
4F:→ samuelcdf: 阵列名结果跟 &阵列名[0] 一样 02/26 16:15
5F:→ d630200x: 有加上&word,刚刚没打到 02/26 16:19
※ 编辑: d630200x (101.8.227.43), 02/26/2019 16:20:58
6F:→ d630200x: 主要是我另一支程式有用自字元做判断,且判断式使用都ok 02/26 16:23
7F:→ d630200x: ,但就是会莫名印两行,後来另外这样写做测试也是一样情 02/26 16:23
8F:→ d630200x: 况 02/26 16:23
9F:→ samuelcdf: \n还在buffer里面, 所以回圈多跑一次 02/26 16:26
10F:→ d630200x: 为什麽\n会还在buffer里?为什麽回圈会重跑? 02/26 16:31
11F:→ samuelcdf: 每次你输入一个字元之後, 接着会按enter. 那个enter也 02/26 16:33
12F:→ samuelcdf: 被当成另外一个输入的字元了 02/26 16:33
13F:推 nthank: 输入的enter也算是一个字元 02/26 17:38
14F:→ MOONRAKER: 到底写了多少程式才发现这个大家都知道的伟大bug 02/26 18:12
15F:→ dces4212: stdin buffer里面还有enter字元 02/26 19:01
16F:推 stupid0319: 月经文 02/26 19:03
17F:→ chchwy: 1. 换行符号 2. 这不是bug 02/26 19:53
18F:→ tomsawyer: cin也会啊lul 02/26 21:02
19F:推 Bencrie: 好险你没有真的去 bugzilla 报 bug XD 02/27 01:28
20F:推 IhateOGC: 台湾之光!! 快点去报Bug,这很明显是Bug 02/27 09:45
21F:→ IhateOGC: 我资料表单就常常遇到这鸟问题 02/27 09:45
22F:嘘 OhYiDay: XD 02/27 10:57
23F:推 TitanEric: 抱歉我笑了 02/27 11:37
24F:推 wei115: 缓冲区日常,特别是格式化和非格式化特别容易遇到 02/27 13:53
25F:推 x246libra: 原来有这种问题,之前没特别注意,谢谢发文者 02/27 14:11
26F:→ hunandy14: 记得是要把sancf 还什麽放到 while 内就好了 02/27 17:18
27F:→ hunandy14: 阿想起来了 好像是 file 才是XDD 02/27 17:42
28F:→ koka813: 真的是笑了 03/01 15:49
29F:推 HanaYukii: cin不会 03/07 01:41
30F:推 a0928855286: 那要怎麽解决啊? 03/12 01:14