int main() {
int y, z, a, b, c;
int x;
double d;
cout << "Enter Numbers! Enter -999 to Stop:\n";
y = 0; z = 0; a = 0;
b = 0; c = 0; d = 0;
while (x != -999) {
cin >> x;
if (x > 0) y++;
if (x > 0) b += x;
if (x == 0) z++;
if (x < 0 && x != -999)a++;
if (x < 0 && x != -999) c += x;
}
d = b * 1.0 / y * 1.0;
if (b == 0 || y == 0) {
d = 0;
}
cout << "Total Positive Numbers are: " << y << endl;
cout << "Total Negative Numbers are: " << a << endl;
cout << "Total Zeros are: " << z << endl;
cout << "Sum of Positive Numbers is: " << b << endl;
cout << "Sum of Negative Numbers is: " << c << endl;
cout << "Average of Positive Numbers is: " << d * 1.0 << endl;
return 0;
}
Visual Studio编译器在第13行说其“使用了未初始化的局部变量'x'”。
但是,在其他在线编译器上没有问题。
答案 0 :(得分:8)
Visual Studio在这里对您很友好:在C ++中,读取未初始化变量的行为是未定义,而(x != -999)
是第一次遇到时未初始化的读取。
不要忽略其他编译器发出的警告。
答案 1 :(得分:1)
不需要读取未初始化的变量(您执行的操作)是编译器错误。该标准将其定义为具有“未定义的行为”。这基本上意味着允许编译器编译您的程序,但可以对程序的任何部分执行 ,因为它现在定义为具有否明确定义的行为-所以任何都可以。
在C ++中,程序员最终有责任了解所有语言规则,并且从不编写任何可调用UB的内容< em>任何地方,并且不需要 编译器来帮助您/诊断错误,它可以假设您没有写任何UB,也没有写任何结果还是可以的。
在C ++中,没有安全网 /没有训练轮。