C 打印数字时出现分段错误

C 打印数字时出现分段错误,c,C,我试图编写一个简单的代码,读取20个数字,然后按相反的顺序打印它们 代码如下 int main(){ int array[20]; int i; for (i=0; i<20; i++) scanf("%d", &array[i]); for (i=20; i > 0; i++) printf("%d\n", array[i]); } intmain(){ int数组[20]; int i; 对于(i=0;i0;i++)printf(“%d\

我试图编写一个简单的代码,读取20个数字,然后按相反的顺序打印它们

代码如下

int main(){
    int array[20];
    int i;
    for (i=0; i<20; i++) scanf("%d", &array[i]);
    for (i=20; i > 0; i++) printf("%d\n", array[i]);
}
intmain(){
int数组[20];
int i;
对于(i=0;i0;i++)printf(“%d\n”,数组[i]);
}

我不明白为什么在插入数字而不是打印数字后,会出现分段错误(11)

对于第二个
循环,您有3个问题:

  • 它从20开始(这将得到第21个元素)
  • 你想减少i而不是增加
  • 我相信您还希望在位置0处显示第一个元素(因此
    =0
    而不是
    >0

  • 用于(i=19;i>=0;i--)printf(“%d\n”,数组[i])

    问题在
    的第二个
    中。您正试图访问数组的位置n°20,但它只包含来自的索引
    0到19,因此您的代码应为:


    用于(i=19;i>=0;i--)printf(“%d\n”,数组[i])

    将第二个for循环的值更改为19到0,包括19和0。

    在循环中

    for (i=20; i > 0; i++) printf("%d\n", array[i]);
    
    你有三个缺点。a) 应该从
    19开始,b)在
    0结束,c)应该递减,所以

    for (i=19; i >= 0; i--) printf("%d\n", array[i]);
    

    这应该是
    i--

    (i=20;i>0;i++)
    -->
    (i=19;i>0;i--)
    你不应该浪费你(和我们)的时间问这个问题。只需使用所有警告和调试信息(
    gcc-Wall-Wextra-g
    )进行编译,然后使用调试器(
    gdb
    )一步一步地运行程序(也许……)。那可能会更快!顺便说一句,您应该测试返回计数(或失败),并养成阅读您正在使用的每个函数的文档的习惯。@WeatherVane作为一个初学者很糟糕。@linamamm不,它不是。试想一下,如果你知道所有的事情,然后发现它们都是无效的,那会是什么样子?然后再把++改成-。@GerardoZinno,我相信19比0就涵盖了这一点。:)
    for (i=20; i > 0; i++) printf("%d\n", array[i]);