C++ - 输出与初始化变量不同?
C++ - output is different than initialized variable?
我更感兴趣的是了解为什么我的输出不正确,而不是不同的解决方案。请参阅代码注释。似乎总和计算会根据注释掉的内容出错,但正如您在输出中看到的那样,我的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]
相关文章:
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 不稳定的C :每行适应性变化多变量初始化
- 同一函数中的静态函数变量初始化顺序
- C 语言中的静态变量初始化
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 类POD成员变量初始化
- 尝试捕获类变量初始化的范围
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 多变量初始化编译器支持