【发布时间】:2013-03-08 16:16:13
【问题描述】:
我有一个简单的 C 程序,它循环以从用户那里获取不定数量的数字(它是一种 CAS)。我正在用多种语言编写程序,虽然 C++ 版本运行良好,但 C 版本在循环结束时停止,当程序要求另一个用户操作时,需要用户输入两次操作。以下是该程序的工作方式:
输入操作
4+2
6
6+2 // 用户在上一个答案的基础上加 2
8+x / / 用户可以无限期地继续这样添加
相反,会发生以下情况:
输入操作
4+2
6+2
// 在用户再次输入“+2”之前什么都不会发生
+2
8+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阅读用户输入并在之后对其进行解析。
标签: c while-loop scanf