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

时间:2018-08-24 16:40:37

标签: c++

与其他解决方案相比,我更想了解为什么我的输出不正确。请参阅代码注释。似乎总和的计算会因注释的内容而产生错误,但是正如您在输出中看到的那样,我的 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 $  

2 个答案:

答案 0 :(得分:3)

您正在访问未初始化的变量。例如,使用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;

在程序逻辑方面也许还有其他问题,但是在继续操作之前首先要初始化变量。

答案 1 :(得分:0)

建议每行有一个声明,并在需要变量之前立即进行声明。同样使用Is there a standard sign function (signum, sgn) in C/C++?中的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]