我有以下代码:
#include <stdio.h>
int main()
{
int student = 1;
float mark, total = 0;
while (mark != -1.00) {
printf("Enter marks for Student %d (or -1 to stop): ", student);
scanf("%f", &mark);
total += mark;
student++;
}
return 0;
}
当我尝试用gcc -O -Wall main.c
编译它时,我得到警告:
main.c: In function ‘main’:
main.c:8:17: warning: ‘mark’ is used uninitialized [-Wuninitialized]
8 | while (mark != -1.00) {
| ~~~~~^~~~~~~~
main.c:6:11: note: ‘mark’ declared here
6 | float mark, total = 0;
|
开始变量mark
没有初始化值,因此它的值是未知的。
在下一行中,您在while
循环中比较它。但是您还没有从user中读取mark
的值,因此正在比较的值是未知的。
我怀疑你想使用do { ... } while
循环:
do {
printf("Enter marks for Student %d (or -1 to stop): ", student);
scanf("%f", &mark);
total += mark;
student++;
} while (mark != -1.00);
在添加到total
之前,您还应该检查mark
是否不是-1.00
,因此您的循环应该是:
while (1) {
printf("Enter marks for Student %d (or -1 to stop): ", student);
scanf("%f", &mark);
if (mark != -1.00) {
total += mark;
++student;
} else {
break;
}
}
当你在处理浮点数时,你可能要记住它们的精度有限的基本问题
while (mark != -1.00)
mark
在这里使用未初始化,因此警告。这是未定义的行为。