求c语言高手,ASCII码排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求c语言高手,ASCII码排序相关的知识,希望对你有一定的参考价值。

描述
输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。
输入
第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。
输出
对于每组输入数据,输出一行,字符中间用一个空格分开。
样例输入
3
qwe
asd
zxc样例输出
e q w
a d s
c x z
#include <stdio.h>
#define SIZE 3
int main (void)

char n[SIZE];
int num, row, change,number;
char t, m, q;
change = 1;
number = 0;
printf ("请输入要判断多少行\n");
scanf ("%d", &row);
for (;change <= row;change ++)

for (;number < SIZE; number++)

scanf ("%c", n);

t = 'A';
for (number = 0;number < SIZE; number++)

if(n[number] >= t)
t = n[number];

m = 'z';
for (number = 0;number < SIZE; number++)

if (n[number] <= m)
m = n[number];

for (number = 0;number < SIZE; number++)

if (n[number] <= m && n[number] >= t)
q = n[number];

printf ("\n");

printf ("%c %c %c", m, q, t);

return 0;


我的这段代码为什么不行

这个问题是一类典型的问题:读取之前的回车符错误。
输入函数存在一个缓冲区,输入函数每次都会从输入缓冲区读数。同时,scanf()与getchar

()函数有一个相同的特点,就是输入完毕必须敲回车键才算完成输入。而getch(),getche()是

不需要回车键作为结束的。然而,只要输入缓冲区没有清空,所有字符包括回车都会记录在

输入缓冲区。如果没有将缓冲区清空,若下次调用scanf()与getchar()函数读取字符,则问

题就出现了,因为回车本身就是字符。
比如在这个程序中楼主会发现第一次输“qwe”,答案是“e q w”,但是第二次输

“ads”后,却出现了“ a d”,却没有“s”,第三次输入“cxz”,则

更奇怪得出现了“ c s”和“ x z”。
因为根据你的输入依次是“qweadscxz”,输入缓冲区没有清空,每次读

三个,将也读入,对其进行排序难道不是这个结果吗?
要想改对,只要加一个fflush(stdin);清空输入缓冲区就解决了!

看程序:
#include
int main()

char a,b,c,t;
int x,y,z;
while(scanf("%c%c%c",&a,&b,&c)!=EOF)

fflush(stdin);
x=(int)a; //楼主这有些语法错误,我已经改过来了
y=(int)b;
z=(int)c;

if(x>y)

t=a;
a=b;
b=t;

if(x>z)

t=a;
a=c;
c=t;


if(y>z)

t=b;
b=c;
c=t;

printf("%c %c %c\n",a,b,c);

return 0;
参考技术A for (;number < SIZE; number++)

scanf ("%c", n);

首先一个问题是,你这里读过的字符都丢掉了,变量n里面只有最后一次读的字符。
参考技术B 输入数据的时候有错,要用scanf("%c",n++) 还有输出的时候,printf函数方在最外成for循环的话括号里面呀,否则就只输出最后一次的结果!我只看到这些,希望对你有帮助 参考技术C #include<stdio.h>
#include<stdlib.h>
#define SIZE 3

int main()
int N;
char c;
int k;
printf("请输入要判断多少行N\n");
printf("N=");
scanf("%d",&N);
char **p=(char**)malloc(N);
for(int i=0;i<N;i++)
*(p+i)=(char*)malloc(SIZE);
scanf("%s",*(p+i));
for(int j=0;j<SIZE;j++)
c=*(*(p+i)+j);
k=j-1;
while(k>=0&&*(*(p+i)+k)>c)
*(*(p+i)+k+1)=*(*(p+i)+k);
k=k-1;
*(*(p+i)+k+1)=c;



for(int i=0;i<N;i++)
for(int j=0;j<SIZE;j++)
printf("%c",*(*(p+i)+j));
printf(" ");
if((j+1)%3==0)
printf("\n");

return 0;

//这样能够实现。若一行的字符数不为3,可把字符数进行输入,输入你想要的值。
参考技术D #include <stdio.h>
#include <math.h>

#define SIZE 3

int compone(const void * s,const void * n)

return *(char *)s-*(char *)n;

char n[SIZE];

int main(void)

int row;
int j = 0;
int i ;
printf("请确定要输入的行数:");
scanf(" %d",&row);
while (j < row)
printf("\n");
for (i=0; i< SIZE; i++)
scanf(" %c",&n[i]);
n[i] = '\0';
qsort(n,SIZE,sizeof(char),compone);
printf("%s",n);
j++;



return 0;

对了,我这个只能立即显示。。不能接受完全部输入再显示

C语言字符转换ASCII码

有没有哪位高手能详细说明下,不用PRINTF这个函数,重点是要用自己的写的函数能完成这个功能吗。
谢谢高手给予详解,本人菜鸟,请给出代码。

#include<stdio.h>

voidmain()


unsignedchara;

printf("enterchar:");

scanf("%C",&a);

printf("ascii=%d",a);//强制转化为ascii码


扩展资料:

在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

参考资料来源:百度百科-ASCII

参考技术A

1、首先需要打开自己的终端窗口,如下图所示。

2、接下来需要利用vim创建一个c程序,如下图所示。

3、接下来需要编写自己所需要的程序,如下图所示。

4、最后在自己的程序中就可以看到字符转成ASCII了,如下图所示。

参考技术B //函 数 名:CharToHex()
//功能描述:把ASCII字符转换为16进制
//函数说明:
//调用函数:
//全局变量:
//输 入:ASCII字符
//返 回:16进制
/////////////////////////////////////////////////////////////////////
unsigned char CharToHex(unsigned char bHex)
if((bHex>=0)&&(bHex<=9))
bHex += 0x30;
else if((bHex>=10)&&(bHex<=15))//大写字母
bHex += 0x37;
else bHex = 0xff;
return bHex;

/////////////////////////////////////////////////////////////////////
//函 数 名:HexToChar()
//功能描述:把16进制转换为ASCII字符
//函数说明:
//调用函数:
//全局变量:
//输 入:16进制
//返 回:ASCII字符
/////////////////////////////////////////////////////////////////////
unsigned char HexToChar(unsigned char bChar)
if((bChar>=0x30)&&(bChar<=0x39))
bChar -= 0x30;
else if((bChar>=0x41)&&(bChar<=0x46))//大写字母
bChar -= 0x37;
else if((bChar>=0x61)&&(bChar<=0x66))//小写字母
bChar -= 0x57;
else bChar = 0xff;
return bChar;本回答被提问者采纳
参考技术C C语言中,字符和其ASCII码是等价的,比如'A'这个字符和单字节整数65是等价的.
比如char c='A';int a=c;的话,a就是65
参考技术D ASCII字符值范围是0x00到0x7f。因为有不可见和键盘不好拍的字符。所以你可用整型数输入。
unsigned
char
a[100],b[100];
unsigned
char
x,y,z;
scanf("%d",&a[i]);
if
(a[i]
>
0x7f
||
a[i]
<
0)
重输;
加减运算
就用算数表达式。例如
y
=
a[1]+a[2];
b[2]
=
a[1]
+
a[2]
-
a[3];
unsigned
char
就是8bit无符号整数。
加减运算后很可能超界,即大于0x7f或小于0。
加减运算后的字符很可能是不可打印字符,或“看不见”的字符。
所以你的题目有问题。

以上是关于求c语言高手,ASCII码排序的主要内容,如果未能解决你的问题,请参考以下文章

c语言怎么求字符的ascii码

c语言怎么求字符的ascii码

C语言字符转换ASCII码

c语言字符与ASCII码的转换

C语言ASCII码与字母如何转换?求详解

c语言字符ASCLL码顺序