[問題] scanf()讀入字元時直接跳過

看板C_and_CPP作者 (猴)時間11年前 (2013/07/15 11:03), 編輯推噓2(2012)
留言14則, 9人參與, 最新討論串1/1
問題(Question): case 1和 case 2 裡,無法做第一次的輸入,會直接跳到第二次 預期的正確結果(Expected Output): 請設計一多載函式,函式有2個參數:(1)當2個參數都是字元時,則顯示該字元 (2)當參數的字元和整數x時,則顯示該字元x次, (3)當2個參數都是整數時,則顯 示兩個數相乘的結果 錯誤結果(Wrong Output): case 1 和 case 2 有問題,case 3則沒問題 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/api/embed.js/link/TnpbOU #include<stdlib.h> #include<stdio.h> void aaa(char,char); void aaa(char,int); void aaa(int,int); int main() { int num1,num2; char a1,a2; int key; printf("1.兩字元,2.一字元一數字,3.兩數字\n"); scanf("%d",&key); switch (key) { case 1: printf("輸入第一個字元\n"); scanf("%c",&a1); printf("輸入第二個字元\n"); scanf("%c",&a2); aaa(a1,a2); break; case 2: printf("輸入第一個字元\n"); scanf("%c",&a1); printf("輸入第一個數字\n"); scanf("%d",&num1); aaa(a1,num1); break; case 3: printf("輸入第一個數字\n"); scanf("%d",&num1); printf("輸入第二個數字\n"); scanf("%d",&num2); aaa(num1,num2); break; } system("pause"); return 0; } void aaa(char a1,char a2) { printf("%c,%c",a1,a2); } void aaa(char a1,int num1) { int i; for(i=0;i<num1;i++) printf("%c ",a1); } void aaa(int num1,int num2) { int ans; ans=num1*num2; printf("%d*%d=%d\n",num1,num2,ans); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.153.51

07/15 11:11, , 1F
換行字元: scanf(" %c", ..);
07/15 11:11, 1F

07/15 11:18, , 2F
%c前面都要加空白是嗎,感謝
07/15 11:18, 2F

07/15 11:20, , 3F
你會直接跳第二次是因為讀到你按enter的訊號
07/15 11:20, 3F

07/15 11:23, , 4F
謝謝
07/15 11:23, 4F

07/15 22:17, , 5F
"C語言" 不是關鍵字...
07/15 22:17, 5F

07/15 23:51, , 6F
也可以在抓取字元的前面加上"fflush(stdin);"將緩衝區的資
07/15 23:51, 6F

07/15 23:51, , 7F
料清空後就不會有抓到換行符號的問題
07/15 23:51, 7F

07/16 01:46, , 8F
樓上請不要再教別人用 fflush(stdin) 了. 標準已經說 fflush
07/16 01:46, 8F

07/16 01:46, , 9F
用在非 output stream 是 undefined behavior
07/16 01:46, 9F

07/16 04:17, , 10F
char a3[128]; scanf("%s", a3); a3[1] = '\0';
07/16 04:17, 10F

07/16 04:18, , 11F
當成字串來取,如何?
07/16 04:18, 11F

07/17 00:14, , 12F
抱歉...因為之前看書都是這樣用所以就習慣這樣用了!
07/17 00:14, 12F

07/18 03:11, , 13F
不過用字串讀的缺點是讀不到空白字元(enter或空格類)
07/18 03:11, 13F

07/24 18:35, , 14F
這個問題我也問過!感謝scwg大!正解加空白...
07/24 18:35, 14F
文章代碼(AID): #1HusQMxp (C_and_CPP)