用 while 循环减法
Subtraction with while loop
如何使用 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,我该如何解决?
问题是您将 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;
}
减法逻辑有问题。当您输入 20 时,它作为负数存储在 RE 中,因为
RE = RE - V; and RE is zero in the first iteration.
当您输入第二个数字时,上面的表达式变为
RE = -20 -10 which is -30;
如果您要减去 2 个数字,请先使用 scanf
读取这两个数字,然后再进行数学计算
RE = NUM1-NUM2;
如何使用 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,我该如何解决?
问题是您将 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;
}
减法逻辑有问题。当您输入 20 时,它作为负数存储在 RE 中,因为
RE = RE - V; and RE is zero in the first iteration.
当您输入第二个数字时,上面的表达式变为
RE = -20 -10 which is -30;
如果您要减去 2 个数字,请先使用 scanf
读取这两个数字,然后再进行数学计算
RE = NUM1-NUM2;