作者uismuu (烏斯木)
看板C_and_CPP
標題[問題] scanf的問題
時間Sat Nov 27 21:49:23 2010
遇到的問題: (題意請描述清楚)
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
→ 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