我刚刚制作了这个程序,要求输入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;
}
如果我输入数字5,则应显示
前5个数字的总和为15
但显示
前5个数字的总和是2293687
但是当我将c设置为0时
它的核心工作
那有什么区别?
答案 0 :(得分:14)
因为C ++不会自动为您设置零。所以,你应该自己初始化它:
int c = 0;
未初始化的变量具有随机数,例如2293687
,-21
,99999
,...(如果它未调用未定义的行为阅读它)
此外,static
变量将设置为其默认值。在这种情况下0
。
答案 1 :(得分:3)
如果您未将c
设置为0
,则可以采用任何值(从技术上讲,这是一个不确定的值)。如果你这样做
c = c + i;
然后您将i
的值添加到可能是任何内容的内容中。从技术上讲,这是未定义的行为。实践中发生的事情是你不能依赖于那个计算的结果。
在C ++中,当“默认初始化”时,非静态或全局内置类型没有执行初始化。为了对int
进行零初始化,您需要明确:
int i = 0;
或者您可以使用值初始化:
int i{};
int j = int();
答案 2 :(得分:2)
根据定义,非静态变量是未初始化的 - 它们的初始值是未定义的。
在另一个编译器上,每次都可能得到正确的答案,另一个错误的答案或不同的答案。
C / C ++不会做额外的工作(初始化为零至少涉及一两条指令),而你没有要求它们这样做。
答案 3 :(得分:0)
前5个数字的总和是2293687
这是因为没有初始化c
,您将获得之前存储在该位置的值(垃圾值)。这将使yor程序的行为未定义。在程序中使用之前,必须先初始化c
。
int c= 0;
答案 4 :(得分:0)
因为当你这样做时:
int a,i,c;
因此实例化并初始化c
,你还没有说出你想要它初始化的内容。这里的规则有点复杂,但它归结为两件事: