我有一个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
?
答案 0 :(得分:0)
此处您首先获取输入,然后在比较并分配给fMax
之后,您正在检查while
循环条件,这就是原因。
在比较之前初始化fMax
和fResult[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;
}