如果我将20,30,10000 ... 9999这样的整数读入变量 a 会怎样?它只打印我读过的数字中的第一个数字......为什么会这样? 例如,如果我读取 123 ,则在屏幕上打印1.是不是应该将整数 123 转换为等效的ASCII字符表示形式?
#include <stdio.h>
int main() {
char a;
scanf("%c", &a);
printf("%c", a);
return 0;
}
这是C语言的考试题目。
答案 0 :(得分:3)
不,它将字符(由机器表示为小整数)读入变量。
如果输入 1 0 0 (数字100,三个按键,因此三个字符),它只会存储第一个< em> character ,即领先1
。
如果您想将数字转换为实际整数,当然应使用%d
和int
变量。
使用%c
打印将通过将小整数值解释为字符(而不是整数)来打印单个字符。因此,对于输入 1 0 0 ,您将看到1
打印出来,即表示十进制数字的字符
如果您要打印出所读字符的数字代表,请使用%c
进行扫描,但使用%d
进行打印,然后将char
转换为(int)
printf()
来电。{/ p>
答案 1 :(得分:1)
问题是%c为控制台输入解析了一个char。从123这样的数字中只需要第一个字母并处理其余部分。解析int值的方法是在scanf函数上使用%d。
答案 2 :(得分:1)
不,它只会读取char变量中的第一个字符。 char变量如何在瞬间存储多个字符?它不能。
因此,如果您想要ASCII值,请改为输入整数。
int a;
scanf("%d", &a); // suppose input is 65
printf("%c", a); // prints 'A'
printf("%d", a); // prints 65
尽管
char a;
scanf("%c", &a); // suppose input is 65
printf("%c", a); // prints '6'
printf("%d", a); // prints 54 which is the ASCII value of '6'