复习字符串排序遇到的问题

img


#include<stdio.h>//比较字符串大小,从小到大输出 
#include<string.h>
main()
{
    int i,j,m,n;
    printf("输入字符串数量:");
    scanf("%d",&n);
    char name[n][21];
    char step[21];
    for(m=0;m<n;m++)
    {
        printf("输入字符串:");
        gets(name[m]);
    }
    for(i=0;i<n-1;i++)
    for(j=0;j<n-1-i;j++)
    {
        if(strcmp(name[j],name[j+1])>0)
        {
                strcpy(name[j],step);
                strcpy(name[j],name[j+1]);
                strcpy(name[j+1],step);
        }
    }    
    printf("排序后的字符串如下\n"); 
    for(i=0;i<n;i++)
    printf("%s\n",name[i]);
}

如图,我输入数量后,直接打印了两次"输入字符串"

第7行scanf之后加个getchar();接收掉换行符才行

#include<stdio.h>//比较字符串大小,从小到大输出 
#include<string.h>
main()
{
    int i,j,m,n;
    printf("输入字符串数量:");
    scanf("%d",&n);
    char name[n][21];
    char step[21];
    printf("输入%d个字符串:\n",n);
    for(m=0;m<n;m++)
    {
        gets(name[m]);
    }
    for(i=0;i<n-1;i++)
    for(j=0;j<n-1-i;j++)
    {
        if(strcmp(name[j],name[j+1])>0)
        {
            strcpy(step,name[j]);
            strcpy(name[j],name[j+1]);
            strcpy(name[j+1],step);
        }
    }    
    printf("排序后的字符串如下\n"); 
    for(i=0;i<n;i++)
    printf("%s\n",name[i]);
}

排序代码写错了,之前没看到,但是一样的问题