想请教一下,为什么只有一个输出值?怎么更改呀

想请教一下,为什么只有一个输出值?怎么更改呀
想请教一下,为什么只有一个输出值?怎么更改呀
我的思路是,先给输入的值排序,然后再根据输入的字母输出

img

img


题目要求:

img

在scanf("%d%d%d"后,增加一个getchar(),否则下一行第一个%c会接收换行符的。
另外输出要求三个整数间加空格,你也没加

产生错误的原因应该是前面scanf读取整数后丢弃到缓冲区,而这个换行符就读取到d数组的第一个元素里了,用while循环里的getchar()把这个换行符及其他可能产生的多余字符读走就可以了。


##include <stdio.h>

void swap(int * a,int * b,int *c){
    
    int  t;
    if(*a>*b){
        t=*a;
        *a=*b;
        *b=t;
    }
    
    if(*a>*c){
        t=*a;
        *a=*c;
        *c=t;
    }
    
    if(*b>*c){
        t=*b;
        *b=*c;
        *c=t;
    }
} 


int main(void){
    
    int a,b,c,i;
    char d[3];
    scanf("%d%d%d",&a,&b,&c);
    while(getchar()!='\n')  //因为读取前面的整数 scanf丢弃了换行符到缓冲区,所以需要先清除换行符 
        continue;
    scanf("%c%c%c",&d[0],&d[1],&d[2]);
//    printf("d[0]=%d,d[1]=%d,d[2]=%d\n",d[0],d[1],d[2]); 
    swap(&a,&b,&c);
    
    for(i=0;i<3;i++){
        if(d[i]=='A'){
            printf("%d ",a);
        }
        if(d[i]=='B'){
            printf("%d ",b);
        }
        if(d[i]=='C'){
            printf("%d ",c);
        }
    } 
    
    return 0;
}

img

建议先得结果,再进行计算。输入几个值,先运行,然后总结,运行程序。

for循环是符合条件才输出吧

换种写法,供参考:

#include <stdio.h>
int main()
{
    int d[3], i, j, t;
    char a, b, c;
    scanf("%d%d%d", &d[0], &d[1], &d[2]);
    scanf(" %c%c%c", &a, &b, &c);
    for (i = 0; i < 2; i++)
        for (j = 0; j < 2 - i; j++)
            if (d[j] > d[j + 1]) {
                t = d[j]; d[j] = d[j + 1]; d[j + 1] = t;
            }
    printf("%d %d %d", d[a - 'A'], d[b - 'A'], d[c - 'A']);
    return 0;
}