Re: [問題] getchar() 讀不到字元
※ 引述《Nairoda (new)》之銘言:
→
07/26 20:26,
07/26 20:26
→
07/26 20:29,
07/26 20:29
→
07/26 20:40,
07/26 20:40
不是這意思。
在你的原程式中,實際上輸入 123(Enter)
而 scanf 是以 White Space 為斷點沒錯,其中包含了 '\n', '\t', ' ',
讀進 123 之後,會留下 '\n' 還在你系統的輸入緩充區裡面。
所以當按下了 123(Enter) 之後,你的 getchar 讀到的一定是 '\n' 這種東西。
這種情況也不只 getchar會發生,
scanf("%d%c",&integer, &ch); 一樣會發生。
-------
沒有說有一定的處理技巧、方式,但常見的就是二種,
適用情況也不盡相同,自己去試試便知。
<sol 1>
int num;
char ch;
scanf("%d%*c", &num); // %*c 代表讀入一個字元,但不存入變數 (就是丟掉一個字元)
ch = getchar(); // 已把 '\n' 拿掉
<sol 2>
int num;
char ch;
scanf("%d", &num); // 先讀入一個數字
while(getchar()!='\n'); // 直接把換行前的字元全都讀走
ch = getchar(); // 再讀入輸入之字元
類似的解決應還有一狗票,比較常看到「簡單」,「但不正確」的解法是:
int num;
char ch;
scanf("%d", &num);
fflush(stdin); // 這行有問題
ch = getchar();
fflush 簡單的說是刷新 (這樣翻嗎?不知道繁中有沒有人在翻) 緩衝區,
在標準上是對 stdout 才有作用,而上面程式碼是用在 stdin 上面,
這部份應是看 手邊compiler 如何實做,
一些人覺得用了沒問題,也有一些人最後發現這個 bug 抓很久 ,
( 將 fflush 用在 stdin 之 bug )
fflush 小提一下就好,太深入易惹爭議。
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41
→
07/26 21:45, , 1F
07/26 21:45, 1F
→
07/26 21:47, , 2F
07/26 21:47, 2F
※ 編輯: tropical72 來自: 180.177.78.41 (07/26 21:49)
→
07/26 21:47, , 3F
07/26 21:47, 3F
推
07/26 21:51, , 4F
07/26 21:51, 4F
→
07/26 21:56, , 5F
07/26 21:56, 5F
→
07/26 22:04, , 6F
07/26 22:04, 6F
→
07/26 22:04, , 7F
07/26 22:04, 7F
→
07/26 22:05, , 8F
07/26 22:05, 8F
→
07/26 22:08, , 9F
07/26 22:08, 9F
→
07/26 22:10, , 10F
07/26 22:10, 10F
→
07/26 23:15, , 11F
07/26 23:15, 11F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章