作者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/m.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