虽然在满足条件时循环不会停止

时间:2016-10-16 13:52:39

标签: c while-loop

我有一个while循环,允许用户输入由空格分隔的任意数量的数字,当用户输入0时,程序应该在向用户显示最大数字时终止。

#include <stdio.h>

int main(){
  float fResult[100], fMax;
  int c = 1;
  while (fResult[c] != 0){
    scanf(" %f ", &fResult[c]);
    if (fResult[c] > fMax){
        fMax = fResult[c];
    }
    c = c + 1;
  }
  if (fResult[1]==0){
    printf("empty sequence");
  } else {
    printf("%.3f ", fMax);
  }
}

它工作正常,直到用户输入除负数之外的任何序列。然后结果显示为0

例如,当用户输入-3 -4 -100 -5 0时,结果应为-3,而是获得0,这在技术上是最大数量。 但是,如果用户输入0

,是不是应该忽略while循环

3 个答案:

答案 0 :(得分:0)

此处您首先获取输入,然后在比较并分配给fMax之后,您正在检查while循环条件,这就是原因。

在比较之前初始化fMaxfResult[1],并且检查c不大于100以避免数组索引超出边界。

答案 1 :(得分:0)

只是一个未定义的行为:

在未初始化时,

fmax意外为零。 当未初始化时自动变量可以有任何垃圾值。在你的情况下为零。因此,在前四次迭代中,fmax与负值比较时将保持零值。

您应遵循以下原则:首先填充 - 然后访问

答案 2 :(得分:0)

fMax初始化为第一个读取的值。无需将值保存在数组中。始终检查scanf()的返回值。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    float f, fMax;

    if (scanf("%f", &fMax) != 1) {
        exit(EXIT_FAILURE);
    }
    if (fMax == 0.0) {
        (void) printf("empty sequence\n");
    } else {
        for (;;) {
            if (scanf("%f", &f) != 1) {
                exit(EXIT_FAILURE);
            }
            if (f == 0.0) {
                break;
            }
            if (f > fMax) {
                fMax = f;
            }
        }
        (void) printf("%.3f\n", fMax);
    }
    return 0;
}