看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 我用的IDE是 DEV C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 不知道為什麼,輸入完數字後,卻不讓我輸入字元 餵入的資料(Input): 輸入一個整數後,再輸入一個字元 預期的正確結果(Expected Output): 把整數和字元印出來看 錯誤結果(Wrong Output): 但是只輸入完數字,程式就結束了,不讓我輸入字元 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> #include <stdlib.h> int main() { int n; printf("enter a number\n"); scanf("%d", &n); printf("%d\n", n); printf("enter a char\n"); char c; c = getchar(); printf("%c", c); system("pause"); return 0; } 補充說明(Supplement): 還沒執行前 http://imgur.com/tK6oylO 執行後輸入數字 http://imgur.com/KMPMNv0 程式卻結束了 http://imgur.com/r9SDVpA 明明編譯有過的說,小弟初學C語言,請各位大大解惑,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.92.137 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1444660392.A.FE0.html
LPH66: scanf 數字時不會吃掉在它後面那個不是數字的字 10/12 22:39
LPH66: 你在數字後面敲的 Enter 也是一個字, 它被 getchar 抓走了 10/12 22:40
LPH66: 那個字印出來的效果是換行 (其實就是 '\n') 10/12 22:41
hth9494: 原來是這樣,謝謝這位大大,可是我不懂的地方是 10/12 22:45
hth9494: 為什麼getchar執行的順序會那麼早,他明明被寫在printf 10/12 22:46
hth9494: 之後,為什麼程式不會先印出數字,再讓我輸入字元呢 10/12 22:47
hth9494: 還有我的程式該怎麼改才會達到我想要的效果呢 10/12 22:48
hth9494: 就是可以讓我依序輸入數字和一個字元 例如y之類的 10/12 22:50
LPH66: 實際上它確實是印出數字後再去讀字元的, 只是因為所有輸入 10/12 23:20
LPH66: 會被系統先存在一個暫存區裡才給你讀, 才會造成這種現象 10/12 23:21
LPH66: 這種問題只要你有單獨讀字元跟讀其他東西混著就會發生 10/12 23:22
LPH66: 主要是因為讀字元不會跳過空白跟換行, 但讀其他東西會 10/12 23:22
LPH66: 因此常見解法就是在讀字元之前先一直讀到換行發生為止 10/12 23:23
LPH66: 找到一篇我以前回的文了: #1AYcSB6U 這篇就在講這回事 10/12 23:28
LPH66: 我回的那篇文原文裡有個 FLUSH 巨集就是用來清除的 10/12 23:29
linotwo: 在 getchar 前面用 scanf("%*[\n\r]"); 把換行讀掉試試看 10/12 23:36
ronin728: C語言自由度高,相對安全性弱,編譯過非正確執行的保證 10/13 00:41
hth9494: 了解了,非常感謝!!! 10/13 01:16
damody: 這標題不是違反版規了嗎 10/13 18:22
zxc159623487: 加一個 scanf(" "); 10/31 08:13