Re: [問題] 新手問題getchar與scanf

看板C_and_CPP (C/C++)作者 (._.?)時間13年前 (2013/02/19 22:43), 編輯推噓5(505)
留言10則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《doctortwo (肅殺的十月)》之銘言: : #include<stdio.h> : #include<stdlib.h> : 1 int main() : 2 { : 3 int a,b; : 4 char ch; : 5 : 6 printf("請輸入第一個數字:"); : 7 scanf("%d",&a); : 8 : 9 printf("請輸入第二個數字:"); : 10 scanf("%d",&b); : 11 : 12 printf("請輸入一個字元:"); : 13 scanf("%c",ch); : 14 : 15 printf("您輸入的是%d,%d,%c\n\n",a,b,ch); : 16 : 17 system("pause"); : 18 : 19 } : 大家好 我是剛練習寫程式的人 : 有一個新手問題想請教 : 上面程式執行時 : 我輸入前兩個數字的時候都ok 但等到要輸入字元的時候 就會發生錯誤強制關閉 : 而如果我把第13行改成 ch=getchar(); : 他就不給我輸入字元 : 請問這樣是哪裡出問題了???謝謝 scanf("%c", ch); 發生錯誤強制關閉是因為使用了不正確的型態 如果你知道為什麼 scanf("%d", &a); 當中為什麼 a 前面要加上 & 應該就會知道為什麼 如果你還是不知道為什麼, 或許可以在網路上找找 scanf 的說明 ch = getchar(); 這個不會讓你輸入字元, 是因為他已經讀到字元了 因為使用 standard input 當中, 你打完 b 的數字之後應該會按 enter enter 本身也是個字元, 所以會被 getchar() 捕捉 或許你把 c 印出來就會懂了 試試 printf(">%c<", ch); // 或之類的 code keyword: flush input -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.130.132

02/19 22:51, , 1F
第一個那邊我改成&ch也不行耶?@@
02/19 22:51, 1F
當你改成這樣的時候 就跟你原文的第二種 getchar() 的那種寫法一樣了 所以也會有一樣的問題

02/19 22:57, , 2F
char *ch;
02/19 22:57, 2F

02/19 22:57, , 3F
scanf("%c", ch);
02/19 22:57, 3F

02/19 22:58, , 4F
printf("%c", *ch);
02/19 22:58, 4F
千萬別這樣做 上次有人這樣做.. 結果...... ※ 編輯: pcyu16 來自: 114.33.130.132 (02/19 23:07)

02/19 23:13, , 5F
就多了一天的debug時間,很不方便
02/19 23:13, 5F

02/19 23:26, , 6F
fflush(stdin)
02/19 23:26, 6F
fflush 用在 input stream 上是 undefined behavior

02/19 23:56, , 7F
我懂了!!!!!!!所以scanf跟getchar不能連用對嗎?
02/19 23:56, 7F

02/19 23:57, , 8F
否則getchar()會輸入來自scanf的enter字元
02/19 23:57, 8F

02/19 23:58, , 9F
這樣也跟我輸出的結果相吻合 太感謝了!!
02/19 23:58, 9F

02/20 00:01, , 10F
可是那兩個scanf不是也會有相同問題嗎?
02/20 00:01, 10F
你說的不完全正確 並不是不能連用而是你要知道你在做什麼 一般來說 處理的方式有幾個 一個是用其他方式讀入把你要的字元拿出來, 這邊可以參考 scanf format 另一個是把 enter 給 flush 掉 ※ 編輯: pcyu16 來自: 114.33.130.132 (02/20 00:16)
文章代碼(AID): #1H8u-POM (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1H8u-POM (C_and_CPP)