我只是做了这个程序,要求输入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
时,它可以正常工作。
有什么区别吗?
5条答案
按热度按时间vxf3dgd41#
因为C++不会自动为你设置它为零。所以,你应该自己初始化它:
字符串
未初始化的变量有一个随机数,如
2293687
,-21
,99999
,.(如果它在阅读时没有调用 * 未定义行为 *)另外,
static
变量将被设置为它们的默认值。在本例中为0
。z4bn682m2#
如果不将
c
设置为0
,它可以接受任何值(技术上讲,是一个不确定的值)。c = c + i;
那么你就把
i
的值加到了一个可能是任何值的东西上。从技术上讲,这是一种 * 未定义的行为 *。实际上,你不能依赖于计算的结果。在C++中,非静态或全局内置类型在“default initialized”时没有初始化。为了零初始化
int
,您需要显式:字符串
也可以使用 value initialization:
型
8dtrkrch3#
根据定义,非静态变量是未初始化的-它们的初始值是未定义的。
在另一个编译器上,你可能会得到正确的答案,另一个错误的答案,或者每次都得到不同的答案。
C/C++不做额外的工作(初始化为零至少涉及一两条指令),你没有要求他们做。
wljmcqd84#
前5个数字的总和是2293687
这是因为如果不初始化
c
,你会得到以前存储在那个位置的值(垃圾值)。这将使你的程序的行为未定义。你必须在程序中使用它之前初始化c
。字符串
ojsjcaue5#
因为当你这样做的时候:
字符串
因此示例化和初始化
c
,你还没有说你想要它初始化为什么。这里的规则有点复杂,但它归结为两件事:1.对于整型,如果你没有指定初始化器,变量的值是 * 不确定的 *
1.当你试图读取一个未初始化的变量时,你会调用Undefined Behavior