hdu 2000 ASCII码排序(c语言)

hdu 2000 ASCII码排序

点击做题网站链接

题目描述

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Problem Description
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。

Input
输入数据有多组,每组占一行,有三个字符组成,之间无空格。

Output
对于每组输入数据,输出一行,字符中间用一个空格分开。

Sample Input
qwe
asd
zxc

Sample Output
e q w
a d s
c x z

题目难点

  1. 题目要求“输入数据有多组”,用while(scanf("%c%c%c%*c",&a,&b,&c)!=EOF) 来实现一直输入(实现方法有很多,截取了网上常用的一种)
  2. 当测试第一组数据的时候,很容易成功;
    但当测试第二组第三组数据的时候就发现问题了;
    原因是程序把你用来确认输入的“回车键”当作下一组输入的第一个字符

    解决方法1:专门留一个空字符给回车键,(见第8行输入scanf("%c%c%c % * c",&a,&b,&c));其中 “ * ” 表示该输入项读入后不赋予任何变量,即跳过该输入值。参考问题解答1
    解决方法2:用getchar()吞掉回车键。getchar()是一种函数,功能是从stdio流中读字符。参考问题解答2

问题解答1

#include <stdio.h>

int main()
{
    char a, b, c, t;
    while( scanf("%c%c%c%*c",&a,&b,&c)!=EOF )
    {
		if( a>b ) { t=a; a=b; b=t; }//如果a的ASCII码大于b,就交换a,b

        if( a>c ) { t=a; a=c; c=t; }

        if( b>c ) { t=b; b=c; c=t; }

        printf("%c %c %c
",a,b,c);
    }
    return 0;
}

问题解答2

#include <stdio.h>

int main()
{
    char a, b, c, t;
    while( scanf("%c%c%c",&a,&b,&c)!=EOF )
    {
        getchar();
        if( a>b ) { t=a; a=b; b=t; }//如果a的ASCII码大于b,就交换a,b

        if( a>c ) { t=a; a=c; c=t; }

        if( b>c ) { t=b; b=c; c=t; }

        printf("%c %c %c
",a,b,c);
    }
        return 0;
}
原文地址:https://www.cnblogs.com/yuzilan/p/10626230.html