我有一個簡單的C程序,它循環從用戶(它是一個CAS的種類)獲得無限數量的數字。我正在使用多種語言編寫程序,而C++版本完美工作時,C版本在循環結束時停滯,當程序要求另一個用戶操作時,要求用戶輸入兩次操作。這裏的程序應該如何工作:程序暫停在循環
輸入操作
4 + 2
+2 //用戶增加了2到以前的答案
+ x //用戶可以像這樣無限期地繼續添加
相反,這裏發生了什麼:
輸入操作
4 + 2
+2
//什麼也沒有發生,直到用戶輸入 「+2」 再次
+2
+ x
+ x
[總和8 + x]
等等。
我最初認爲這個暫停是由程序要求用戶輸入兩次引起的,一次是循環開始,然後是循環結束前。我在循環中放置了一個迭代計數器來確定程序應該得到什麼樣的輸入(&num1,&op,&num2
或&op,&num2
)。出於某種原因,這沒有什麼區別。下面的代碼的相關部分:
int opnubmer;
opnumber = 0;
printf("Enter an operation\n");
while(op != '=')
{
if (opnumber == 0)
{
scanf("%d%c%d",&num1,&op,&num2);
}
else if (opnumber != 0)
{
scanf("%s%d",&op,&num2);
}
switch(op)
{
case '+':
num2 += num1;
break;
case '-':
num2 -= num1;
break;
case '*':
num2 *= num1;
break;
case '/':
num2 /= num1;
break;
default:
printf("%s%c%s", "Unknown op: ", op, "\n");
exit(1);
}
printf("Solution: ");
printf("%d",num2);
opnumber++;
num1=num2;
}
誰能幫助我嗎?
'scanf'對於未格式化輸入(來自用戶的輸入)使用「很困難」。它的意思是**格式化輸入**,因此其名稱中的** f **。我建議你用'fgets'閱讀用戶輸入,然後解析它。 – pmg 2013-03-08 16:24:03