c语言用字典顺序排序单词

img

  1. 我觉得自己写的是错的,运行结果却是正确的,而我用认为是正确的运行却不对?
  2. 问题就在于a【n】应该是n个字符串,也就是从0到n-1,所以我下面的for里面也应该是i小于等于n-1,之后两个for里面也依次是n-2和n-1,所以我认为现在图上这个不对,但为什么结果却恰恰相反?

1、for循环应该是小于n,而不是小于等于,n个元素是从0~(n-1)一共n个所以应该是小于。
2、使用gets当for循环开始i=0的时候,gets获取到了空给a[0],所以能输入的个数是n-1个,排序之后输出的第一个也是空值。
3、建议使用scanf来获取输入给a[i],同时搭配system("cls"),清除上一次的缓存。代码参考如下:

int main() {
    int n,i,j;
    puts("请输入待排序的单词的个数");
    scanf("%d", &n);
    char a[n][11], t[11];
    puts("请依次录入待排序的单词且与上方确认的单词数保持一致");
    system("cls");
    for (i = 0; i < n; i++) {
        scanf("%s", a[i]);
    }
    for (i = 0; i < n - 1; i++) {
        for (j = i + 1; j < n; j++) {
            if (strcmp(a[i], a[j]) > 0) {
                strcpy(t, a[i]);
                strcpy(a[i], a[j]);
                strcpy(a[j], t);
            }
        }
    }
    for (i = 0; i < n; i++) {
        puts(a[i]);
    }
    return 0;
}

img

char a[n];
真的可以编译运行吗?