我如何使用while循环进行减法?我可以做添加,但我不能做减法,这是我的代码:
int V, RE=0;
char OP, R;
setlocale(LC_ALL, "Portuguese");
printf("Choose an operation (+Addition -Subtraction): ");
scanf("%c", &OP);
setbuf(stdin, NULL);
if (OP=='+') {
do{
printf("Type a value or -1 to exit: ");
scanf("%d", &V);
if (V!=+1)
RE = RE + V;
}while(V!=+1);
printf("Sum: %d \n", RE);
}
else if (OP=='-') {
do{
printf("Type a value or 0 to exit: ");
scanf("%d", &V);
if (V!=0)
RE = RE - V;
}while(V!=0);
printf("Result: %d \n", RE);
}
else if (OP=='*') {
}
else if (OP=='/') {
}
system("pause");
当我执行值为20和10的代码时,程序应回答“10”,但程序回答我-30,我该如何解决?
答案 0 :(得分:3)
问题是您将RE
初始化为0
,这是错误的。 RE
应初始化为第一个值20
。如果您将RE
初始化为0
,您还期待什么?
RE = 0;
RE = RE - V; // V == 20 -> RE = 0 - 20 = -20;
RE = RE - V; // V == 10 -> RE = -20 - 10 = -30
如果你试试这个,
printf("Type a value or press 0 to exit: ");
scanf("%d", &RE);
if (RE != 0)
{
do {
printf("Type a value or press 0 to exit: ");
scanf("%d", &V);
if (V != 0)
RE = RE - V;
} while (V != 0);
printf("Result: %d \n", RE);
}
它会给你正确的结果。
此外,由于0
是一个数字,退出循环的条件不是很好,您应该检查scanf()
的结果。
printf("Type a value or q to exit: ");
if (scanf("%d", &RE) == 1)
{
int count;
do {
printf("Type a value or q to exit: ");
count = scanf("%d", &V);
if (count == 1)
RE = RE - V;
} while (count == 1);
printf("Result: %d \n", RE);
}
这将退出任何非数字输入,但你得到了我想的点。
同样使用您的代码,如果输入了无效输入,则会出现未定义的行为,因为您尝试读取的值可能未初始化。
注意:如果您允许,可以使用开关,例如
switch (OP)
{
case '+':
/* operate here */
break;
case '-':
/* operate here */
break;
case '*':
/* operate here */
break;
case '/':
/* operate here */
break;
}
答案 1 :(得分:0)
减法逻辑存在问题。当您输入20时,它将作为负数存储在RE中,因为
RE = RE - V; and RE is zero in the first iteration.
当您输入第二个数字时,上面的表达式变为
RE = -20 -10 which is -30;
如果您要减去2个数字,请先使用scanf
读取这两个数字,然后再进行数学运算
RE = NUM1-NUM2;