请问我在这个问题上被困了半个小时,但是找不到错误的原因? 问题代码:测试 生命,宇宙和一切
#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);
}
答案 0 :(得分:4)
您的代码尝试访问不存在的数组元素,这会导致segfault。你应该在数组索引大于数组长度减1:
之前停止循环int a[20];
for (i = 1; i < 20 && a[i - 1] != 42; i++)
{
// ...
}
答案 1 :(得分: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";
}
答案 2 :(得分:0)
您正在尝试打印未初始化的数据......
#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个。
答案 3 :(得分:0)
在初始化之前使用数组值。除非你告诉它,否则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;
}