输入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]);
}
很明显是你输入时加了空格:
有两种方法;
方法一: 加getchar(); 读掉空格;
for(i=0;i<5;i++)
{
scanf("%c",&c[i]);
getchar();
}
方法二: 输入时不加空格,直接输入 edcba
冒泡排序是这样的
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格式输出
应该是Scanf输入的问题
#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]);
}
谢谢各位,我已经解决问题了,的确是scanf输入时加了空格