我有一个应用程序提示用户使用角色:
char letter;
printf("Letter:\n");
scanf("%s", &letter);
printf("ASCII code = %d\n", letter);
问题是用户可以写的重音。如果输入Á
上面的代码给定ASCII代码= -61那么我想,如果我把它转为正数,我得到61
是A
的ASCII。 printf("ASCII code = %d val = %c\n", letter, abs(letter));
但它没有按预期工作,它给出了ASCII code = -61 val =
而不是A
为什么?
答案 0 :(得分:1)
%s
是C字符串的格式说明符,字符大小足以容纳空C字符串。使用%c
,这是单个字符的格式说明符。
答案 1 :(得分:0)
Á
包含ASCII字符代码193。
char
的范围是-128到127. unsigned char
的范围是0到255.
您的代码存在的问题是您正在使用签名的char而不是unsigned char。当您输出signed char时,它会将letter
扩展为一个整数并输出它。如果您使用未签名的变体,您将获得正确的输出。