C语言:这样子输出的字母升序为什么前两个字母没有显示?我的代码有错吗?

输入5个小写字母按升序排序,我写出来没发现什么问题可是调试时前两个字母没显示。
这是我的代码主体片段:

char c[5];
char m;
 printf("\n请输入字母:");


 for(i=0;i<5;i++)
 {
     scanf("%c",&c[i]);
 }
 for(i=0;i<5;i++)
 {
     for(j=i+1;j<5;j++)
     {
         if(c[i]>c[j])
         {
             m=c[j];
             c[j]=c[i];
             c[i]=m;
         }
     }
 }

 printf("升序输出:");
  for(i=0;i<5;i++)
{
  printf("%c ",c[i]);
}

图片说明

5个回答

很明显是你输入时加了空格:
有两种方法;
方法一: 加getchar(); 读掉空格;

     for(i=0;i<5;i++)
     {
         scanf("%c",&c[i]);
         getchar();
     }

方法二: 输入时不加空格,直接输入 edcba

应该是Scanf输入的问题

pengzhanli
旧时光~ 回复Sevsunny: 好像是的,那会不会是因为,scanf读入的时候获取了_e_d_c_b_a 的前几个字符_e_d_,排序之前你看看数组里字符对不
10 个月之前 回复
Sevsunny
Sevsunny 没有吧,j=i+1,i=4时,j=5不小于5,循环不是不会进行吗。。
10 个月之前 回复
#include "stdio.h"
char c[5];
char i,j,m;
int main()
{
    printf("\n请输入字母:");

    for(i=0;i<5;i++)
    {
     scanf("%c",&c[i]);
    }
    for(i=0;i<5;i++)
    {
     for(j=i+1;j<5;j++)
     {
         if(c[i]>c[j])
         {
             m=c[j];
             c[j]=c[i];
             c[i]=m;
         }
     }
    }
    printf("升序输出:");
  for(i=0;i<5;i++)
    {
    printf("%c ",c[i]);
    }
}

图片说明

没毛病呢。

简洁点就这样

#include "stdio.h"
char c[5], i,j,m;
int main()
{
    printf("\n请输入字母:");
      for(i=0;i<5;i++)
     scanf("%c",&c[i]);
    for(i=0;i<5;i++)
    {
     for(j=i+1;j<5;j++)
     {
         if(c[i]>c[j])
         {
             m=c[j];
             c[j]=c[i];
             c[i]=m;
         }
     }
    }
    printf("升序输出:");
    for(i=0;i<5;i++)
       printf("%c ",c[i]);
}

冒泡排序是这样的

int i;int j;char m;
        char c[] = {'e','d','v','b','a'};
        for(i=0;  i<5;  i++) {
            for (j = i; j < 5; j++) {
                if (c[i] > c[j]) {
                    m = c[i];
                    c[i] = c[j];
                    c[j] = m;
                }
            }
        }

        for (int k = 0; k < 5; k++) {
            System.out.print(c[k]);
        }

输出 abdev 没毛病
我这里的是Java输出 C语言你试一下 %d格式输出

huang_ftpjh
huang_ftpjh 回复Sevsunny: 我先给出问题所在的,你一个赞都没有吗
10 个月之前 回复
huang_ftpjh
huang_ftpjh 回复: 直接 edcba输入
10 个月之前 回复
huang_ftpjh
huang_ftpjh 回复Sevsunny:你排序算法没问题,但是 for(i=0;i<5;i++) { scanf("%c",&c[i]); } 这里 你输入不要空格
10 个月之前 回复
Sevsunny
Sevsunny 我觉得我的代码没有错的,只是调试时前三个字母总是输出不出来,试了你的代码也输出不出来
10 个月之前 回复

谢谢各位,我已经解决问题了,的确是scanf输入时加了空格

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐