用 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;