程式如下,是想實作一個簡易四則運算,當正常輸入算式時,功能正常;
但是當故意輸錯時,比如輸入 /// 或 @#$,就會變成死回圈,scanf不
起作用了,求大神解惑!
#include <stdio.h>
int main()
{
double d1,d2,d3;
unsigned char op,noError=1;
while(1)
{
printf("請輸入算式,如3+2等:");
scanf_s("%lf%c%lf",&d1,&op,&d2);
switch(op)
{
case '+':d3=d1+d2;break;
case '-':d3=d1-d2;break;
case '*':d3=d1*d2;break;
case '/':if(d2!=0)
d3=d1/d2;
else
{
printf("除數不能為0!");
noError = 0;
}
break;
default :printf("輸入錯誤,請重新輸入!");noError = 0;
}
if(noError)
printf("%-5.2f%c%-5.2f=%-5.2f\n",d1,op,d2,d3);
noError = 1;
// d1 = d2 = 0;
// op = '+';
}
return 0;
}
故意輸錯時畫風如下:
uj5u.com熱心網友回復:
scanf_s("%lf%c%lf",&d1,&op, 1, &d2);缺少一個引數。因為%c需要指定記憶體大小;
輸入的格式需要注意下,因為中間是%c,因此d1和d2之間只能有一個字符,多余一個字符這個結果就不一樣了,建議在scanf_s下面列印一天陳述句把d1, op, d2打出來和你的輸入對比一下
uj5u.com熱心網友回復:
#include <stdio.h>
int main() {
double d1,d2,d3;
unsigned char op,noError;
while(1) {
printf("請輸入算式,如3+2等(Ctrl-C退出):");
rewind(stdin);
if (3==scanf_s("%lf%c%lf",&d1,&op,&d2)) {
noError=1;
switch (op) {
case '+':d3=d1+d2;break;
case '-':d3=d1-d2;break;
case '*':d3=d1*d2;break;
case '/':
if (d2!=0) {
d3=d1/d2;
} else {
printf("除數不能為0!\n");
noError=0;
}
break;
default:
printf("輸入錯誤,請重新輸入!\n");
noError=0;
}
if (noError) printf("%-5.2lf%c%-5.2lf=%-5.2lf\n",d1,op,d2,d3);
} else {
printf("輸入錯誤,請重新輸入!\n");
}
}
return 0;
}
uj5u.com熱心網友回復:
我不明白為什么輸錯后,進入下一次回圈時,似乎沒有執行scanf陳述句——輸錯了也只是這一次錯了,在下一次回圈時應該是重新等待輸入啊
uj5u.com熱心網友回復:
看不懂(#-.-)我是初學者一個
我先去百度一下rewind是干啥的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/183377.html
標籤:C語言
上一篇:找不到錯誤
