C语言 警告未初始化的局部变量



我有以下代码:

#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在这里使用未初始化,因此警告。这是未定义的行为。

相关内容

  • 没有找到相关文章