请问这题为什么报错呢?

#include
#include

int main()
{
char s1[100][100];
int a[1000];
int b[1000];
char s2[100][100];
int n;
int i;
char temp1[100][100];
char temp2[100][100];
char temp3[100][100];
char temp4[100][100];
while(scanf("%d",&n)!=EOF)
{

          for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                scanf("%s",&s1[i]);
                scanf("%d",&b[i]);
                scanf("%s",&s2[i]);

            }
            for(i=0;i<n;i++)
                {
                    int k=i+1;
                    while(k<n)
                        {   
                            int j;
                                for(j=0;j<strlen(s1[k])||j<strlen(s1[i]);j++)
                                    {

                                        if((s1[i][j]-s1[k][j])>0)
                                            {
                                                strcpy(temp3[k],s1[i]);
                                                strcpy(temp4[i],s1[k]);
                                                strcpy(s1[k],temp3[k]);
                                                strcpy(s1[i],temp4[i]);
                                                strcpy(temp1[k],s2[i]);
                                                strcpy(temp2[i],s2[k]);
                                                strcpy(s2[k],temp1[k]);
                                                strcpy(s2[i],temp2[i]);
                                                int t=b[i];
                                                b[i]=b[k];
                                                b[k]=t;
                                                break;
                                            }
                                        else if((s1[i][j]-s1[k][j])<0)
                                         break;


                                    }

                            k++;
                        }
                }
                int k=1;
         for(i=0;i<n;i++)
            {   
                if(s1[i][0]=='C'&&s1[i][1]=='h'&&s1[i][2]=='i'&&s1[i][3]=='n'&&s1[i][4]=='a')
                continue;
                printf("%d %s %d %s\n",k,s1[i],b[i],s2[i]);
                k++;
                 }  

        for(i=0;i<n;i++)
            {   

                if(s1[i][0]=='C'&&s1[i][1]=='h'&&s1[i][2]=='i'&&s1[i][3]=='n'&&s1[i][4]=='a')

                 {

                    printf("%d %s %d %s\n",k,s1[i],b[i],s2[i]);
                    k++;
                    }
                 }       

        }   


return 0;

}
按照国家名字的英文字母顺序来出场。请编写一个计算机程序实现国家名字的排序(升序),中国(China)在最后一个

输入描述:
多组输入,其中每组输入的第一行表示参加国家数 n(占一行),下面 n 行是国家的报名信息(序号、国家名称、参加人数、所属大洲)

输出描述:
按国家名字的字母序输出信息(东道主国家名字最后输出)。

样例输入:
5

1 France 123 Europe

2 Russia 254 Europe

3 Japan 235 Asia

4 Germany 185 Europe

5 China 560 Asia

样例输出:
1 France 123 Europe

4 Germany 185 Europe

3 Japan 235 Asia

2 Russia 254 Europe

5 China 560 Asia

你的程序写得太乱,重新帮你写了一个

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char s1[100][100]; 
int a[1000];
int b[1000];
char s2[100][100];
int order[100];

int cmp(const void *a, const void *b)
{
    int i = *(int *)a;
    int j = *(int *)b;
    if (strcmp(s1[i], "China") == 0) return 1;
    if (strcmp(s1[j], "China") == 0) return -1;
    return strcmp(s1[i], s1[j]);
}

int main()
{
    int i, n;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        scanf("%s",&s1[i]);
        scanf("%d",&b[i]);
        scanf("%s",&s2[i]);
        order[i] = i;
    }
    qsort(order, n, sizeof(int), cmp);
    for(i=0;i<n;i++)
    {   
        printf("%d %s %d %s\n",a[order[i]],s1[order[i]],b[order[i]],s2[order[i]]);
    }  
    return 0;
}

图片说明

问题解决请及时采纳