基本循环优先级(C)

时间:2017-03-25 11:12:14

标签: c while-loop output operator-precedence

我刚接触编码并且正在学习C.我刚才有一个关于while循环的问题。

#include <stdio.h>

int main(void) {
    int integer1, integer2, number, sum, largest, smallest;
    float average;

    integer1 = 0;
    number = 0;
    sum = 0;
    largest = integer1;
    smallest = integer1;

    while (integer1 != -1) {
        printf("Enter the number: ");
        scanf_s("%d", &integer1);
        number++;
        sum = sum + integer1;

        if (integer1 >= largest) {
            largest = integer1;
        }
        if (integer1 <= smallest) {
            smallest = integer1;
        }
    }

    average = (float) sum / number;

    printf("The number of user's input: %d.\n", number);
    printf("The sum of input numbers: %d.\n", sum);
    printf("The average of input numbers: %.2f.\n", average);
    printf("The largest number is: %d.\n", largest);
    printf("The smallest number is %d.\n", smallest);

    return 0;
}

我写的代码的目标是:

  1. 从用户读取整数值。
  2. 当用户输入“-1”时终止while循环。
  3. 输出printf语句及其对应的值。
  4. 问题在于:我声明的所有整数变量都不应包含值'-1;由用户输入。我认为这与while循环的优先级问题有关,但我似乎无法确定它是什么。非常感谢任何帮助或见解。

    谢谢!

3 个答案:

答案 0 :(得分:4)

有时,whiledo / while循环都不符合您的需求,因为退出循环的决定必须在循环体的中间进行。

读取值并决定读取后要执行的操作会出现这种情况之一。一个常见的解决方案是设置一个无限循环,并从break上的中间退出:

for (;;) {
    printf("Enter the number: ");
    scanf_s("%d", &integer1);
    if (integer1 == -1) {
        break;
    }
    ... // The rest of your code
}

答案 1 :(得分:1)

为了达到你想要的效果,你需要添加一行。

 //use infinite loop
  while (1) {
        printf("Enter the number: ");
        scanf_s("%d", &integer1);
        //jump out of the loop because the loop has already started.
        //but the value was -1
        if (integer == -1) break;
        number++;
        sum = sum + integer1;

        if (integer1 >= largest) {
            largest = integer1;
        }
        if (integer1 <= smallest) {
            smallest = integer1;
        }
    }

答案 2 :(得分:-1)

只需在while循环之前添加scanf()语句。