看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: 剛發現這問題,就是宣告一個字元陣列裡面有兩個位置 但是當我輸入完第一個字元時它第二個位置就直接跳開,程式直接結束 希望得到的正確結果:兩個位置皆能輸入 開發平台: Dev-C++ 有問題的code: (請善用置底文標色功能) #include <stdio.h> int main() { char word[2]; printf("請輸入兩個字元\n"); printf("word[0]="); scanf("%c",&word[0]); printf("word[1]="); scanf("%c",&word[1]); printf("\n"); system("pause"); return 0; } 程式碼很短,但是我真看不出錯在哪裡.... 麻煩不吝指教,感謝! -------------------------------------------------- 謝謝ad大 那我有什麼辦法當print出word[0]=時輸入一個字元 print出word[1]=時再輸入一個字元 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.108.131
adks3489:你輸入的時候應該會按個enter吧 12/19 15:24
adks3489:第二次接收到的就是那個enter 12/19 15:24
※ 編輯: topwing 來自: 118.169.108.131 (12/19 15:34)
adks3489:我想到的是可以一個char temp,然後temp就接著word[0]讀取 12/19 15:35
adks3489:所以enter會被temp吃掉 12/19 15:35
topwing:有一點我還是想不通,如果是宣告int型態的陣列就不會遇到這 12/19 15:41
topwing:種問題,但是char型態就會@@a 12/19 15:41
VictorTom:因為%c讀入字元, 分隔符號也是字元, 所以用%c讀入時, 12/19 15:51
VictorTom:scanf沒辦法知道你哪個字元要印, 哪個是分隔.... 12/19 15:52
VictorTom:法一: 第二個字元以後改用 scanf("\n%c",&word[1]); 12/19 15:53
adks3489:還有你可以試試看第二個scanf %c前面加上一個空白 12/19 15:53
adks3489:可以再去查一下scanf的用法,大概可以解決很多疑惑 12/19 15:56
VictorTom:法二: scanf後面加一行 while(getchar() != '\n'); 12/19 15:56
VictorTom:它會把後面的字元全部抓掉直到換行, 類似清除stdin 12/19 15:56
VictorTom:緩衝區的動作:) 12/19 15:57
topwing:感謝樓上兩位的指教,謝謝! 12/19 16:07
andyisman:scanf(" %c", &word[1]);吧? 12/19 17:38
andyisman:這樣可以嗎? 12/19 17:39
Gway:推文正解 一個式%c 前多一個空格 就不會抓無法顯示的字元 12/19 23:08
Gway:另一個就使使用 fflush(stdin) 這個方法 去清空站存區內容 12/19 23:09
iamivers0n:fflush(stdin)不要用吧... 12/19 23:39
Gway:怎麼了嗎? 我是記得洪維恩書上有寫可以用啊 @@" 12/21 10:30
VictorTom:看來洪的書又要被多記上一筆了XD 12/21 10:55
VictorTom:fflush是對output stream用的, 對stdin使用的話, 12/21 10:56
VictorTom:結果未定義; 印象中看到的資料是Windows下似乎有效, 12/21 10:56
VictorTom:Linux可能就沒有作用了; 以上全憑印象, 有錯請指正:) 12/21 10:57
nowar100:fflush(stdin)是未定義!未定義!未定義! 請記住 XD 12/21 23:15
VictorTom:老師在說你有沒有在聽, 沒有嘛, 那(以下省略數十字XD) 12/21 23:28
Gway:水歐 眾版友真是惠我良多 XD so good 12/22 21:35