[問題] 字元陣列無法輸入第二個字元

看板C_and_CPP作者 (Levin)時間14年前 (2009/12/19 15:20), 編輯推噓10(10018)
留言28則, 7人參與, 最新討論串1/1
( *[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

12/19 15:24, , 1F
你輸入的時候應該會按個enter吧
12/19 15:24, 1F

12/19 15:24, , 2F
第二次接收到的就是那個enter
12/19 15:24, 2F
※ 編輯: topwing 來自: 118.169.108.131 (12/19 15:34)

12/19 15:35, , 3F
我想到的是可以一個char temp,然後temp就接著word[0]讀取
12/19 15:35, 3F

12/19 15:35, , 4F
所以enter會被temp吃掉
12/19 15:35, 4F

12/19 15:41, , 5F
有一點我還是想不通,如果是宣告int型態的陣列就不會遇到這
12/19 15:41, 5F

12/19 15:41, , 6F
種問題,但是char型態就會@@a
12/19 15:41, 6F

12/19 15:51, , 7F
因為%c讀入字元, 分隔符號也是字元, 所以用%c讀入時,
12/19 15:51, 7F

12/19 15:52, , 8F
scanf沒辦法知道你哪個字元要印, 哪個是分隔....
12/19 15:52, 8F

12/19 15:53, , 9F
法一: 第二個字元以後改用 scanf("\n%c",&word[1]);
12/19 15:53, 9F

12/19 15:53, , 10F
還有你可以試試看第二個scanf %c前面加上一個空白
12/19 15:53, 10F

12/19 15:56, , 11F
可以再去查一下scanf的用法,大概可以解決很多疑惑
12/19 15:56, 11F

12/19 15:56, , 12F
法二: scanf後面加一行 while(getchar() != '\n');
12/19 15:56, 12F

12/19 15:56, , 13F
它會把後面的字元全部抓掉直到換行, 類似清除stdin
12/19 15:56, 13F

12/19 15:57, , 14F
緩衝區的動作:)
12/19 15:57, 14F

12/19 16:07, , 15F
感謝樓上兩位的指教,謝謝!
12/19 16:07, 15F

12/19 17:38, , 16F
scanf(" %c", &word[1]);吧?
12/19 17:38, 16F

12/19 17:39, , 17F
這樣可以嗎?
12/19 17:39, 17F

12/19 23:08, , 18F
推文正解 一個式%c 前多一個空格 就不會抓無法顯示的字元
12/19 23:08, 18F

12/19 23:09, , 19F
另一個就使使用 fflush(stdin) 這個方法 去清空站存區內容
12/19 23:09, 19F

12/19 23:39, , 20F
fflush(stdin)不要用吧...
12/19 23:39, 20F

12/21 10:30, , 21F
怎麼了嗎? 我是記得洪維恩書上有寫可以用啊 @@"
12/21 10:30, 21F

12/21 10:55, , 22F
看來洪的書又要被多記上一筆了XD
12/21 10:55, 22F

12/21 10:56, , 23F
fflush是對output stream用的, 對stdin使用的話,
12/21 10:56, 23F

12/21 10:56, , 24F
結果未定義; 印象中看到的資料是Windows下似乎有效,
12/21 10:56, 24F

12/21 10:57, , 25F
Linux可能就沒有作用了; 以上全憑印象, 有錯請指正:)
12/21 10:57, 25F

12/21 23:15, , 26F
fflush(stdin)是未定義!未定義!未定義! 請記住 XD
12/21 23:15, 26F

12/21 23:28, , 27F
老師在說你有沒有在聽, 沒有嘛, 那(以下省略數十字XD)
12/21 23:28, 27F

12/22 21:35, , 28F
水歐 眾版友真是惠我良多 XD so good
12/22 21:35, 28F
文章代碼(AID): #1BB7xIhX (C_and_CPP)