[問題] scanf疑問

看板C_and_CPP作者 (希望微笑)時間13年前 (2010/10/20 22:25), 編輯推噓2(206)
留言8則, 4人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 我使用scanf函式,分別做兩種實驗 1.先輸入一個字元後輸入入一個數字 2.先輸入一個數字後輸入一個字元 其中第1個實驗可以成功,第二個卻不行...我想知道差在哪 希望得到的正確結果: 輸入1個int:999 輸入1個char:a Press any key to continue 程式跑出來的錯誤結果: 輸入1個int:999 輸入1個char:Press any key to continue (螢幕印出"輸入1個char:",緊接者會結束程式顯示Press any key to continue 我無法順利輸入一個字元 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC++ 有問題的code: (請善用置底文標色功能) EX1. 這可以很正確出現我要的輸入(程式功能:先輸入1個char,後輸入1個int) int a1 = 0; char c = 'c'; printf("輸入1個char:"); scanf("%c",&c); printf("輸入1個int:"); scanf("%d",&a1); EX2. 出問題了無法輸入char,輸入完int會直接結束 (程式功能:先輸入1個int,後輸入1個char) int a1 = 0; char c = 'c'; printf("輸入1個int:"); scanf("%d",&a1); printf("輸入1個char:"); scanf("%c",&c); EX3. 這可以很正確出現我要的輸入(程式功能:先輸入1個int,後輸入1個char) int a1 = 0; char c = 'c'; printf("輸入1個int:"); scanf("%d",&a1); printf("輸入1個char:"); scanf(" %c",&c); 在EX2與EX3的差異我標註起來了,若就EX3要空一格,為何EX1卻沒空仍可以正常顯示 補充說明: 感謝幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.224.164

10/20 22:27, , 1F
因為你輸入 999[enter] 那個[enter]也是一個字
10/20 22:27, 1F

10/20 22:28, , 2F
接下來 scanf("%c",&c); 就會讀到那個[Enter]然後結束
10/20 22:28, 2F

10/20 22:29, , 3F
一個辦法是擺個 scanf("%*c"); 在 scanf("%c",&c); 前面
10/20 22:29, 3F

10/20 22:30, , 4F
對後....先輸入數字緊接後面是字串...析收了enter符號
10/20 22:30, 4F

10/20 22:30, , 5F
感謝囉!
10/20 22:30, 5F

10/20 23:16, , 6F
個人推薦加上空白的作法(EX3) 那個空白會match blank字元..
10/20 23:16, 6F

10/20 23:21, , 7F
咦,所以blank字元就包括換行符號囉?
10/20 23:21, 7F

10/21 01:26, , 8F
對 嚴格說是 match whitespace 它包含空白換行和Tab
10/21 01:26, 8F
文章代碼(AID): #1ClllYUd (C_and_CPP)