看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) scanf 語法被跳過 希望得到的正確結果: scanf 被執行 得到的錯誤結果: 請輸入一數字 3 請輸入一四則運算符號 請再輸入一數字 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 有問題的code: (請善用置底文標色功能) #include<stdio.h> #include<stdlib.h> #include<conio.h> int main(){ float n1,n2,ans,a; char x; printf("請輸入一數字\n"); scanf("%f",&n1); printf("請輸入一四則運算符號\n"); scanf("%c",&x); printf("請再輸入一數字\n"); scanf("%f",&n2); if ( x == '+' ){ ans = n1 + n2 ; printf("ans:" "%f",ans); }else if ( x == '-' ){ ans = n1 - n2 ; printf("ans:" "%f",ans); }else if ( x == '*' ){ ans = n1 *n2 ; printf("ans:" "%f",ans); }else if ( x == '/'&&n2!=0 ){ ans = n1 / n2 ; printf("ans:" "%f",ans); } getch(); system("pause"); return 0; } 補充說明: 這是作業題...不過是我出給學生的 現在學生發生了這種事拿來問我 我也不清楚為什麼了... 請幫幫我 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.127.91
uismuu:我把scanf("%c",&x); 改成scanf("%c%c",&x,&x); 就過了... 11/27 21:50
uismuu:但是還是不知道為什麼 11/27 21:50
tropical72:因為 enter ('\n') 會被讀進去. 11/27 21:52
tropical72:scanf("%f",&n1); 改scanf("%f%*c",&n1);就沒這問題. 11/27 21:53
purpose:其實這個 scnaf 也是常見問題,你爬文標題還跟你一樣... 11/27 21:53
Yshuan:出給學生的... 11/27 22:00
adks3489:您教C語言嗎0.0 11/27 22:25
johnhmj:fflush(stdin); <=這一行加到scanf("%f",&n1);後面!! 11/27 22:40
johnhmj:樓上大大說的沒錯,是因為enter被讀入造成的。 11/27 22:41
LPH66:版上連我好多人都推過好幾次了別用 fflush(stdin).... 11/27 22:42
LPH66:正好剛剛心血來潮搜到一篇慘劇 #19nvgbVG 11/27 22:44
johnhmj:好吧!不然也可以把"char x"改為"char x[2]",讓它去讀… 11/27 22:46
johnhmj:字串 =>scanf("%s",x); 也可以。 11/27 22:47
x000032001:" %c"也行 11/27 22:51
johnhmj:嗯…原來fflush/fflushall不是ANSIC標準。 11/27 23:25
LPH66:是用在 input stream 上不是標準... 11/27 23:32