我做错了什么(C数组)?

Sha*_*ack 1 c arrays

我只是C的初学者.
我正在尝试制作一个简单的程序来按升序排列用户输入的数字.我已经找到了解决方案,但无法理解为什么我的其他代码不起作用:(

-------------------------------------------------------------------------
working code:
-------------------------------------------------------------------------
#include <stdio.h>
int main()
{
    int i,j,num[10];
 printf("Enter 10 numbers\n");
 for (i=0;i<10;i++)
  {scanf("%d",&num[i]);}


    for (i=0;i<9;i++)
     {
         for (j=i+1;j<10;j++)
           {
               if (num[i]>num[j])
                 {
                    num[i]+=num[j];
                    num[j]=num[i]-num[j];
                    num[i]=num[i]-num[j];
                 }
           }
     }
    printf("The numbers in ascending order are:");
    for (i=0;i<10;i++)
      {
          printf(" %d",num[i]);
      }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)
-------------------------------------------------------------------------
code that won't work:
-------------------------------------------------------------------------
#include <stdio.h>
int main()
{
    int i,j,num[10];
 printf("Enter 10 numbers\n");
 for (i=1;i<=10;i++)
  {scanf("%d",&num[i]);}


    for (i=1;i<10;i++)
     {
         for (j=i+1;j<=10;j++)
           {
               if (num[i]>num[j])
                 {
                    num[i]+=num[j];
                    num[j]=num[i]-num[j];
                    num[i]=num[i]-num[j];
                 }
           }
     }
    printf("The numbers in ascending order are:");
    for (i=1;i<=10;i++)
      {
          printf(" %d",num[i]);
      }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在后一个程序中,数字不按顺序出现,甚至还有未输入的数字.

我的问题是,它的代码基本相同吗?只是在后一个程序中,数字会被存储num[1]num[10]而不是num[0]通过num[9]
它与数组定义有关吗?
看来我有严重的误解,请帮帮我!

kfm*_*e04 8

在C中,当你有int num[10];,你的索引需要从0到9,从不到10.所以查看你的代码,如果有的话,i或者j在程序运行期间的任何时候最终得到10,这是个坏消息.