看看我这个C++程序哪有问题……

问题:有一个已排好的数组,今输入一个数,要求按原来的规律将它插入数组中。(原来的数组为:1,4,6,9,13,16,19,28,40,100)
Input: 10 outputs: 1,4,6,9,10,13,16,19,28,40,100

下面是我写的

#include <iostream>
using namespace std;
int main()
{
int a[20]={1,4,6,9,13,16,19,28,40,100},n=0,x,save1,save2;
cout <<"请输入一个数字:";
cin >> x;
while (n <= 20)
{
if ( a[n] <= x && a[n+1] >= x)
{
save1 = a[n+1];
a[n+1] = x;
n = n+2;
while (n<= 20)
{
save2 = a[n];
a[n] = save1;
save1=save2;
n++;
}
}
else
n++;
}
n=0;
save1=0;
while (a[n] !=0)
{
n++;
}
while (save1 < n-1)
{
cout <<a[save1] <<",";
save1++;
}
cout << a[n-1];
}
运行的时候可以得到结果,但是出现报错Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.,原因在哪?

数组越界了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-29
你程序写的明显有问题么, 首先数组的下标, 一共20个, 下标最大是19, 你<=20肯定不行
你的判断a[n] <= x && a[n+1] >= x, 你输入101的时候n一直++要超出范围了..
目测你的数字中最小应该是1咯, 那就按下面的方法写, 当然也可以再开个数组用memcpy去写,这个你可以自己去试验一下.
int a[20]={1,4,6,9,13,16,19,28,40,100},n=0,x,save1,save2;
cout <<"请输入一个数字:";
cin >> x;
while(a[n] != 0)
{
n++;
}
save1 = n;
n = 0;
while (n < 20)
{
if ( a[n] <= x && a[n+1] >= x)
{
save2 = n+1;
n = save1;
while(n >= save2)
{
a[n+1] = a[n];
n--;
}
a[save2] = x;
break;
}
else if ( a[n] == 0)
{
a[n+1] = x;
break;
}
n++;
}
n = 0;
while(n<20 && a[n] != 0)
{
cout<<a[n++] << ",";
}
第2个回答  2012-11-29
第1个问题:你这个a数组开了20,但里面的数据只有10个。你循环的时候n也是按着20跑的,这样的话,a[10]之后都会没有数据,包括a[20]其实是个溢出。因为a的下标范围是[0..19]。所以建议你在处理一下这个边界。
第2个问题:你现在的程序有bug。当插入的数为0、或者110这样,应该插在第一个位置或者是增加在最后一个的时候,你目前的程序是没有效果的。

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网