为什么只能输出四个结果

#include<stdio.h>
#include<string.h>
int main()
{
int h,i,j,m;
char str1[5][10],str2[10];
printf("输入五个单词:\n");
for(h=0;h<5;h++)
gets(str1[h]);
for (j=0;j<5;j++)
for(i=0;i<5-j;i++)
if(strcmp(str1[i],str1[i+1])>0)
{

            strcpy(str2,str1[i+1]);
            strcpy(str1[i+1],str1[i]);
            strcpy(str1[i],str2);
         }
 printf("按字典顺序排列的结果为:\n ");
 for(m=0;m<5;m++)
 puts(str1[m]);
 return 0;
 

}

img

你冒泡算法实现部分不对的

#include<stdio.h>
#include<string.h>
int main()
{
    int h,i,j,m;
    char str1[5][10],str2[10];
    printf("输入五个单词:\n");
    for(h=0;h<5;h++)
        gets(str1[h]);
    for (j=0;j<5-1;j++){
            for(i=0;i<5-j-1;i++){
                if(strcmp(str1[i],str1[i+1])>0){   
                        strcpy(str2,str1[i+1]);
                        strcpy(str1[i+1],str1[i]);
                        strcpy(str1[i],str2);
                    }
            }            
    }
     printf("按字典顺序排列的结果为:\n");
     for(m=0;m<5;m++)
         puts(str1[m]);
 }

此外你编码习惯还需要调整。


strcpy(str2,str1[i+1]);
当j =0时,i循环到4时,这里有str1[5]