从ASCII码中获取不同的值

从ASCII码中获取不同的值,c,ascii,C,Ascii,我有一个应用程序,它会提示用户输入来自用户的字符: char letter; printf("Letter:\n"); scanf("%s", &letter); printf("ASCII code = %d\n", letter); 问题在于用户可以书写的重音。如果输入是Á上面给定的ASCII码=-61,那么我想,如果我把它变成正数,我会得到61,也就是ASCII码中的A打印F(“ASCII代码=%d val=%c\n”,字母,abs(字母)) 但它并没有像预期的那样工作,它给出了

我有一个应用程序,它会提示用户输入来自用户的字符:

char letter;
printf("Letter:\n");
scanf("%s", &letter);
printf("ASCII code = %d\n", letter);
问题在于用户可以书写的重音。如果输入是
Á
上面给定的ASCII码=-61,那么我想,如果我把它变成正数,我会得到
61
,也就是ASCII码中的
A
<代码>打印F(“ASCII代码=%d val=%c\n”,字母,abs(字母))

但它并没有像预期的那样工作,它给出了
ASCII代码=-61 val=

而不是
A
为什么?

%s
是C字符串的格式说明符,字符的大小仅足以容纳空C字符串。使用
%c
,它是单个字符的格式说明符。

Á
具有ASCII格式的字符代码193

字符的范围是-128到127。
无符号字符的范围为0到255


代码的问题是您使用的是有符号字符而不是无符号字符。当您输出带符号的字符时,它会将
字母
符号扩展为整数并输出它。如果使用无符号变量,您将获得正确的输出。

已修复。:)但是如何解决ASCII码输出的问题呢?你确定abs(字母)输出“A”,我把“=”(ASCII+61)。正如Pochi所说,你的字符是有符号字符。使用无符号字符;ASCII字符最多只有127个-ASCII中没有Á(ISO-8859-1中的代码点193)。