我写了这段代码来“查找给定的字符是否是数字”:
#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
。
2条答案
按热度按时间b5buobof1#
C语言中的字符实际上只是记号表中的数字。
%c
主要是在人类喜欢读/写的字母数字记号表和C程序内部使用的原始二进制之间进行转换。表达式
ch>='0'&&ch<='9'
的计算结果为1
或0
,它是int
类型的原始二进制整数(在C++中是bool
类型)。如果你尝试用%c
打印它,你会得到索引为0或1的symbol table character,它甚至不是一个可打印的字符(0-31是不可打印的)。所以你打印一个不可打印的字符.相反,您需要使用
%d
打印整数,然后printf
将正确转换为可打印的符号'1'
和'0'
作为一个旁注,养成一个习惯,总是以
\n
结束你的printf语句(序列),因为在许多系统上,这“刷新输出缓冲区”=实际上打印到屏幕上。gwbalxhn2#
在内存中,int占用4字节的内存,你试图将int值存储在一个字符中,该字符将返回一个字符值,而不是%c中的int值,如果你使用的是%d,它将返回存储在4字节内存中的int值。