我刚刚制作了这个程序,要求输入5到10之间的数字,然后计算这里输入的数字的总和就是代码
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int a,i,c;
cout << "Enter the number between 5 and 10" << endl;
cin >> a;
if (a < 5 || a > 10)
{
cout << "Wrong number" << endl;
system("PAUSE");
return 0;
}
for(i=1; i<=a; i++)
{
c=c+i;
}
cout << "The sum of the first " << a << " numbers are " << c << endl;
system("PAUSE");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我输入数字5,它应该显示
前5个数字的总和是15
但它显示出来
前5个数字的总和是2293687
但是当我把c设为0时
它的核心工作
那么区别是什么呢 ?
mas*_*oud 14
因为C++不会自动为您设置零.所以,你应该自己初始化它:
int c = 0;
Run Code Online (Sandbox Code Playgroud)
未初始化的变量具有随机数,如2293687,-21,99999,...(如果它不调用未定义行为读书时)
此外,static变量将设置为其默认值.在这种情况下0.
如果您没有设置c为0,则它可以采用任何值(从技术上讲,一个不确定的值)。如果你然后这样做
c = c + i;
那么你正在将 的价值添加i到可能是任何东西的东西上。从技术上讲,这是未定义的行为。在实践中发生的情况是您不能依赖该计算的结果。
在 C++ 中,非静态或全局内置类型在“默认初始化”时没有执行初始化。为了零初始化 an int,您需要明确:
int i = 0;
Run Code Online (Sandbox Code Playgroud)
或者您可以使用值初始化:
int i{};
int j = int();
Run Code Online (Sandbox Code Playgroud)
根据定义,非静态变量是未初始化的——它们的初始值是未定义的。
在另一个编译器上,您可能每次都会得到正确的答案、另一个错误的答案或不同的答案。
C/C++ 不会做您没有要求他们做的额外工作(初始化为零至少涉及一两条指令)。