为什么会这样啊,哪里错了

img

img

#include<stdio.h>
int main()
{
    int i=0,a;
    int b[10000000];
    while(scanf("%d",&a)!=0)
    {
        b[i]=a;
        i++;
    }
    int j=0; 
    for(j=i-1;j>=0;j--)
    {
        printf("%d ",b[j]);
    }
    return 0;
}

是你数组开大了吗?但不应该不运行就退出了啊,我修改了一下可以运行,如下:


#include<stdio.h>
int main()
{
    int i=0,a;
    int b[256];
    while(scanf("%d",&a)!=0&&a!=0)
    {
        b[i]=a;
        i++;
    }
    int j=0; 
    for(j=i-1;j>=0;j--)
    {
        printf("%d ",b[j]);
    }
    return 0;
}
 

img

在函数内部不能分配过大的数组,栈会放不下,把数组放在全局区

#include<stdio.h>

int b[10000000];
int main()
{
    int i=0,a;
    while(1)
    {
        scanf("%d", &a);
        if (a != 0)
        {
            b[i] = a;
            i++;
        }
        else
        {
            break;
        }
    }
    int j=0; 
    for(j=i-1;j>=0;j--)
    {
        printf("%d ",b[j]);
    }
    return 0;
}

img

修改处见注释,供参考:

#include<stdio.h>
int main()
{
    int i = 0, a;
    int b[100000] = { 0 };    //int b[10000000];
    while (scanf("%d", &a) == 1 && a != 0)//while (scanf("%d", &a) != 0)
    {
        b[i] = a;
        i++;
    }
    int j = 0;
    for (j = i - 1; j >= 0; j--)
    {
        printf("%d ", b[j]);
    }
    return 0;
}