C语言 菜鳥求解 不断地输入一组资料(皆属于同一种资料型态,如整数、浮点数或字串(不超过20字元))

不断地要求使用者输入一组资料(皆属于同一种资料型态,如整数、浮点数或字串(不超过20字元)),直到此组资料符合离开条件时则程式结束。每次输入的一组资料内容如下所示:
N d1 d2 … dN
N代表接下来输入的资料数量
d1 d2 … dN 表示各个资料值(同一种资料型态,可为整数、浮点数或字串)
在此注意的是当N<=0时,则代表此资料符合离开程式条件

当一组资料被输入且不符合离开条件时,请将资料由小到大排序输出。
字串资料之大小比较,请根据字串中各个位置的英文字母在ASCII Table中出现顺序来做为优先顺序,英文字母越前面者优先权越高。

输入资料:
5 5 3 4 2 1
5 1.1 3.3 2.2 4.4 5.5
3 to too tomorrow
0

输出结果:
1 2 3 4 5
1.1 2.2 3.3 4.4 5.5
to tomorrow too


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 1000
char s[MAXN][21];
char s1[21];
char t;
int N,i,j,v,n;
double d;
int main() {
    while (1) {
        scanf("%d",&N);
        if (N<=0) break;
        for (i=0;i<N;i++) {
            scanf("%20s",s[i]);
        }
        for (i=0;i<N;i++) {
            if (1==sscanf(s[i],"%d%n",&v,&n)) {
                if (s[i][n]!=0) break;
            }
        }
        if (i>=N) t='i';
        else {
            for (i=0;i<N;i++) {
                if (1==sscanf(s[i],"%lf%n",&d,&n)) {
                    if (s[i][n]!=0) break;
                }
            }
            if (i>=N) t='f';
            else t='s';
        }

        for (i=0;i<N-1;i++)
            for (j=i+1;j<N;j++) {
                switch (t) {
                case 'i':
                    if (atoi(s[i])>atoi(s[j])) {
                        strcpy(s1,s[i]);
                        strcpy(s[i],s[j]);
                        strcpy(s[j],s1);
                    }
                break;
                case 'f':
                    if (atof(s[i])>atof(s[j])) {
                        strcpy(s1,s[i]);
                        strcpy(s[i],s[j]);
                        strcpy(s[j],s1);
                    }
                break;
                case 's':
                    if (strcmp(s[i],s[j])>0) {
                        strcpy(s1,s[i]);
                        strcpy(s[i],s[j]);
                        strcpy(s[j],s1);
                    }
                break;
            }
        }
        for (i=0;i<N;i++) {
            if (i==0) printf( "%s",s[i]);
            else      printf(" %s",s[i]);
        }
        printf("\n");
    }
    return 0;
}