将数字读入char

时间:2014-06-02 15:20:33

标签: c char int scanf

如果我将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语言的考试题目。

3 个答案:

答案 0 :(得分:3)

不,它将字符(由机器表示为小整数)读入变量。

如果输入 1 0 0 (数字100,三个按键,因此三个字符),它只会存储第一个< em> character ,即领先1

如果您想将数字转换为实际整数,当然应使用%dint变量。

使用%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'