|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
问题:输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
int main()
{
char x,y,z;
int i,j;
while(scanf("%c%c%c",&x,&y,&z)!=EOF)
{
char Rank[]={x,y,z};
for(i=1;i>=0;i--) // 控制最大下标
{
for(j=0;j<=i;j++)
{
if(strcmp(Rank[j],Rank[j+1])==1) //ASCII码值大则交换
{
char temp;
temp=Rank[j];Rank[j]=Rank[j+1];Rank[j+1]=temp;//交换顺序,按小到大排序
}
}
}
printf("%c %c %c",Rank[0],Rank[1],Rank[2]);
}
return 0;
}
本帖最后由 jackz007 于 2019-10-1 13:47 编辑
这一句
if(strcmp(Rank[j],Rank[j+1])==1) //ASCII码值大则交换
必须改成下面这样:
if(Rank[j] > Rank[j+1]) //ASCII码值大则交换
while(scanf("%c%c%c",&x,&y,&z)!=EOF) { // 受键盘缓冲区滞留 '\n' 的干扰,循环状态下,不能保证正确获得字符。
. . . . . .
}
必须这样修改:
while(scanf("%c%c%c",&x,&y,&z)!=EOF) {
. . . . . .
fflush(stdin) ; // 添加此句,下一次 scanf() 读取键盘输入之前,清空键盘缓冲区
}
程序应该有退出通道,下面的代码在键盘输入空回车的时候会退出运行。
#include <stdio.h>
#include <string.h>
int main()
{
char s[82] , c[3] , x ;
int i , j ;
for(;;) {
printf("\n") ;
fgets(s , 80 , stdin) ;
if(strlen(s) > 1) {
sscanf(s , "%c%c%c" , & c[0] , & c[1] , & c[2]) ;
for(i = 1 ; i < 3 ; i ++) {
for(j = i ; j && c[j] < c[j - 1] ; j --) {
x = c[j - 1] ;
c[j - 1] = c[j] ;
c[j] = x ;
}
}
printf("\n") ;
printf("%c %c %c\n" , c[0] , c[1] , c[2]) ;
} else {
break ;
}
}
}
|
|