使用while循环减法

时间:2015-01-17 19:15:03

标签: c while-loop subtraction

我如何使用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,我该如何解决?

2 个答案:

答案 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;