C++ - 输出与初始化变量不同?

C++ - output is different than initialized variable?

本文关键字:变量 初始化 输出 C++      更新时间:2023-10-16

我更感兴趣的是了解为什么我的输出不正确,而不是不同的解决方案。请参阅代码注释。似乎总和计算会根据注释掉的内容出错,但正如您在输出中看到的那样,我的areZero变量初始化为 0 并生成一个随机数,number_Of_Positive也是如此。另外,我输入了-1作为值,number_of_Negative打印0。真的不知道这里发生了什么。

/* 
Use a loop, accept 10 integers and do:
Count and print out how many of the entered numbers are positive.
Count and print out how many of the entered numbers are negative.
Count and print out how many of the entered numbers are zeroes.
Calculate and print the sum of all the numbers entered.
Calculate and print the average value of all the numbers entered.
*/
int number_Of_Positive, number_Of_Negative, areZero, userInput, sum, avg = 0;
cout << "Enter 10 integers" << endl;
for(int i = 0; i < 10; i ++) {
cin >> userInput; 
sum += userInput;
if (userInput == 0)
areZero++;
if ( userInput >= 0)   //is even
number_Of_Positive++;
else                        //is odd
number_Of_Negative++;
}
avg = sum / 10;
cout << "The sum is " << sum << endl;
cout << "the average is " << avg << endl;
cout << "Positive " << number_Of_Positive << "   Negative " << 
number_Of_Negative << endl;
cout << "Zero " << areZero << endl;
}
**//The OUTPUT**
ec2-user:~/environment/CPPBasics1 $ g++ ten_integers.cpp -o ten_integers
ec2-user:~/environment/CPPBasics1 $ ./ten_integers
Enter 10 integers
-1
0
1
2
3
4
5
6
7
8
The sum is 35
the average is 3
Positive -554687472   Negative 0
Zero 4196384
ec2-user:~/environment/CPPBasics1 $  

您正在访问未初始化的变量。例如,使用sum += userInput,您可以访问变量sum,但尚未sum赋值。这会产生未定义的行为,因此程序的输出是不可预测的。

请注意,int number_Of_Positive, number_Of_Negative, areZero, userInput, sum, avg = 0仅初始化变量age,而使所有其他变量保持未初始化状态。

你应该写int number_Of_Positive=0, number_Of_Negative=0, areZero=0, userInput=0, sum=0, avg = 0;

也许在程序逻辑方面还有其他问题,但是在继续之前,初始化变量是第一件事。

建议每行有一个声明,并在需要变量之前进行。还使用 C/C++ 中是否有标准符号函数(signum、sgn(中的sgn()函数?你可以使你的代码更简单:

int counters[3] = {};
auto sum = 0;
for(int i = 0; i < 10; i ++) {
auto userInput = 0;
cin >> userInput; 
sum += userInput;
auto sgn = (userInput > 0) - (userInput < 0); // -1 for negative, 0 for 0 and +1 for positive
++counters[sgn + 1];
}

现在counters[0]将具有负数计数,counters[1]零,counters[2]大于零。注意counters[2]将计数为>0,但如果您需要正数的输出,您可以简单地添加:counters[1] + counters[2]