【问题标题】:Basic While Loop Precedence (C)基本 While 循环优先级 (C)
【发布时间】:2017-03-25 11:12:13
【问题描述】:

我是编码新手,正在学习 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 语句及其对应的值。

问题是:我声明的所有整数变量都不应该包含 '-1; 的值。由用户输入。我认为这与关于 while 循环的优先级问题有关,但我似乎无法确定它是什么。非常感谢任何帮助或见解。

谢谢!

【问题讨论】:

  • smallest = integer1; --> #include &lt;limits.h&gt; ... smallest = INT_MAX;

标签: c while-loop output operator-precedence


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    为了实现你想要的,你需要添加一行。

     //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;
            }
        }
    

    【讨论】:

    • 那么循环中的条件可能应该是while (true),因为在检查循环条件时,您永远不会遇到integer 为-1 的情况。
    • 是的,但在 C 中你应该使用 while(1) { }
    • 这是一个见仁见智的问题,但任何一个都比无用的条件更可取。
    • @HariLamichhane There was a whole Q&A on this topic,讨论 while (true)while (1)
    • 所有三个选项的最大问题是,如果您选择一个,就会有人过来讨论它。浪费时间的机会很多。这是一个经典的。它本身就是浪费时间的教父。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多