c语言ACSII码排序,生手求教

c语言ACSII码排序,新手求教!
ASCII码排序

 时间限制:3000 ms | 内存限制:65535 KB 

描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。
输入第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。输出对于每组输入数据,输出一行,字符中间用一个空格分开。


我写的代码是:
#include <stdio.h>
int main (void){
  char ch1,ch2,ch3,d,ch4,ch0;
  int N,a,b,c;
  
  scanf ("%d%c",&N,&ch0);
  while (scanf ("%c%c%c%c",&ch1,&ch2,&ch3,&ch4)!=EOF){
  a = int (ch1),b = int (ch2),c = int (ch3);
  if (a > b) {d = ch1;ch1 = ch2;ch2 = d;};
  if (a > c) {d = ch1;ch1 = ch3;ch3 = d;};
  if (b > c) {d = ch2;ch2 = ch3;ch3 = d;};
  
  printf ("%c %c %c\n",ch1,ch2,ch3);
  }
  
  return 0;
}
但在测试中,输入大部分数是正确的,如果输入cab又不可以正确地按由大到小排序,请帮我看下哪里改,怎么改?

注:那个测试组数先不考虑。就帮我想下排序的。谢谢

------解决方案--------------------
题目没看 楼主的想法貌似错了
------解决方案--------------------
#include <stdio.h>
int main (void){
char ch1,ch2,ch3,d;
int N;

scanf ("%d",&N);
getchar();
while (scanf ("%c%c%c",&ch1,&ch2,&ch3)!=EOF){
getchar();
if (ch1 > ch2) {d = ch1;ch1 = ch2;ch2 = d;};
if (ch1 > ch3) {d = ch1;ch1 = ch3;ch3 = d;};
if (ch2 > ch3) {d = ch2;ch2 = ch3;ch3 = d;};

printf ("%c %c %c\n",ch1,ch2,ch3);
}
return 0;
}
你用a,b,c来比较,但是交换的时候a,b,c却没交换,自然不对