Re: [問題] 新手問題getchar與scanf
※ 引述《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
02/19 22:51, 1F
當你改成這樣的時候
就跟你原文的第二種 getchar() 的那種寫法一樣了
所以也會有一樣的問題
→
02/19 22:57, , 2F
02/19 22:57, 2F
→
02/19 22:57, , 3F
02/19 22:57, 3F
→
02/19 22:58, , 4F
02/19 22:58, 4F
千萬別這樣做 上次有人這樣做.. 結果......
※ 編輯: pcyu16 來自: 114.33.130.132 (02/19 23:07)
推
02/19 23:13, , 5F
02/19 23:13, 5F
推
02/19 23:26, , 6F
02/19 23:26, 6F
fflush 用在 input stream 上是 undefined behavior
推
02/19 23:56, , 7F
02/19 23:56, 7F
→
02/19 23:57, , 8F
02/19 23:57, 8F
→
02/19 23:58, , 9F
02/19 23:58, 9F
推
02/20 00:01, , 10F
02/20 00:01, 10F
你說的不完全正確
並不是不能連用而是你要知道你在做什麼
一般來說 處理的方式有幾個
一個是用其他方式讀入把你要的字元拿出來, 這邊可以參考 scanf format
另一個是把 enter 給 flush 掉
※ 編輯: pcyu16 來自: 114.33.130.132 (02/20 00:16)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章