C中格式说明符的作用是什么?

hiz5n14c  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(121)

我写了这段代码来“查找给定的字符是否是数字”:

#include<stdio.h>
int main()
{
    char ch;
    printf("enter a character");
    scanf("%c", &ch);
    printf("%c", ch>='0'&&ch<='9');
    return 0;
}

字符串
这得到了编译,但在接受输入后,它没有给予任何输出。然而,在将倒数第二行的%c更改为%d说明符后,它确实工作了。我有点困惑,为什么%d工作而%c不工作,尽管变量的数据类型是char

b5buobof

b5buobof1#

C语言中的字符实际上只是记号表中的数字。%c主要是在人类喜欢读/写的字母数字记号表和C程序内部使用的原始二进制之间进行转换。
表达式ch>='0'&&ch<='9'的计算结果为10,它是int类型的原始二进制整数(在C++中是bool类型)。如果你尝试用%c打印它,你会得到索引为0或1的symbol table character,它甚至不是一个可打印的字符(0-31是不可打印的)。所以你打印一个不可打印的字符.
相反,您需要使用%d打印整数,然后printf将正确转换为可打印的符号'1''0'
作为一个旁注,养成一个习惯,总是以\n结束你的printf语句(序列),因为在许多系统上,这“刷新输出缓冲区”=实际上打印到屏幕上。

gwbalxhn

gwbalxhn2#

在内存中,int占用4字节的内存,你试图将int值存储在一个字符中,该字符将返回一个字符值,而不是%c中的int值,如果你使用的是%d,它将返回存储在4字节内存中的int值。

相关问题