请我在这个问题上停留了半个小时,找不到错误出现的原因?问题代码:测试生命、宇宙和一切
#include<iostream>
using namespace std;
int main()
{
int a[20],i;
cin>>a[0];
for(i=1;a[i-1]!=42;i++)
{
cout<<a[i]<<"\n";
cin>>a[i];
}
return(0);
}
请我在这个问题上停留了半个小时,找不到错误出现的原因?问题代码:测试生命、宇宙和一切
#include<iostream>
using namespace std;
int main()
{
int a[20],i;
cin>>a[0];
for(i=1;a[i-1]!=42;i++)
{
cout<<a[i]<<"\n";
cin>>a[i];
}
return(0);
}
您的代码尝试访问不存在的数组元素,这会导致段错误。您应该在数组索引大于数组长度减 1 之前停止循环:
int a[20];
for (i = 1; i < 20 && a[i - 1] != 42; i++)
{
// ...
}
您正在尝试打印未初始化的数据...
#include<iostream>
using namespace std;
int main()
{
int a[20],i;
cin>>a[0]; // a[0] uninitialized
for(i=1;a[i-1]!=42;i++)
{
cout<<a[i]<<"\n";
cin>>a[i];
}
return(0);
}
在 for 循环中,首先获取数据然后打印它。您的数组大小为 20,但您尝试最多写入 42。
在初始化它们之前使用数组值。C++ 不会为你初始化非静态数组,除非你告诉它,所以 $DEITY 知道里面有什么。从技术上讲,其中的任何内容都可能导致异常......或任何其他事情。(对于整数,在 x86 机器上,这实际上是极不可能的。但在其他地方,这是可能的。)
用户可以输入 20 多个数字。不过,这实际上只是更普遍问题的一个特例:您允许未知数量的条目,但无法在不崩溃的情况下全部接受它们。
如果您事先不知道会有多少对象,请使用向量。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> a;
int entry;
cin>>entry;
// Oh, yeah. This. You really, *really* want to check `cin`.
// Otherwise, if the user decided to type "i like cheese", you'd loop
// forever getting zeros while cin tried to parse a number.
// With the array, that'd typically cause a segfault near instantly.
// With a vector, it'll just eat up all your CPU and memory. :P
while (cin && entry != 42) {
a.push_back(entry);
cout << entry << "\n";
cin >> entry;
}
return 0;
}
除了限制问题,您的打印元素没有初始化它们
//for i = 1, a[i] is uninitialized
cout<<a[i]<<"\n";
在访问局部变量(像这样)时,您可能会得到垃圾值。
这可能更好地替代您正在尝试做的事情:
int a[20],i;
for(i=0;i < 20;i++)
{
cin>>a[i];
if (a[i] == 42)
break;
cout<<a[i]<<"\n";
}