2579738746 发表于 2019-10-1 10:18:35

各位大佬帮我看看我这个代码哪里出问题了

#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,Rank)==1) //ASCII码值大则交换
            {
                  char temp;
                  temp=Rank;Rank=Rank;Rank=temp;//交换顺序,按小到大排序
            }
          }
       }
       printf("%c %c %c",Rank,Rank,Rank);
    }
    return 0;
}

jackz007 发表于 2019-10-1 13:15:14

本帖最后由 jackz007 于 2019-10-1 13:47 编辑

                   这一句

                if(strcmp(Rank,Rank)==1) //ASCII码值大则交换
               
                  必须改成下面这样:

                if(Rank > Rank) //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 , c , x                                          ;
      int i , j                                                      ;
      for(;;) {
                printf("\n")                                             ;
                fgets(s , 80 , stdin)                                    ;
                if(strlen(s) > 1) {
                        sscanf(s , "%c%c%c" , & c , & c , & c);
                        for(i = 1 ; i < 3 ; i ++) {
                              for(j = i ; j && c < c ; j --) {
                                        x = c                     ;
                                        c = c                  ;
                                        c = x                         ;
                              }
                        }
                        printf("\n")                                     ;
                        printf("%c %c %c\n" , c , c , c)      ;
                } else {
                        break                                          ;
                }
      }
}

2579738746 发表于 2019-10-1 13:45:38

jackz007 发表于 2019-10-1 13:15
这一句

                if(strcmp(Rank,Rank)==1) //ASCII码值大则交换


是因为strcmp只能进行字符串的比较而不能进行字符的比较对吗?
我那个有退出渠道,就是输入CTRL+Z的时候就退出了- -不过谢谢你
页: [1]
查看完整版本: 各位大佬帮我看看我这个代码哪里出问题了