Pri*_*ora 2 c format-specifiers
我编写此代码是为了“查找给定字符是否是数字”:
#include<stdio.h>
int main()
{
char ch;
printf("enter a character");
scanf("%c", &ch);
printf("%c", ch>='0'&&ch<='9');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它已编译,但在获取输入后没有给出任何输出。然而,在将%c倒数第二行更改为%d格式说明符后,它确实起作用了。我有点困惑为什么%d有效但%c没有,尽管变量是char数据类型。
C 中的字符实际上只是标记表中的数字。主要%c是在人们喜欢读/写的字母数字标记表和 C 程序内部使用的原始二进制文件之间进行转换。
该表达式的ch>='0'&&ch<='9'计算结果为1or 0,它是类型的原始二进制整数int(在 C++ 中是类型bool)。如果您尝试使用 打印该字符%c,您将获得索引为 0 或 1的符号表字符,该字符甚至不是可打印字符(0-31 不可打印)。所以你打印了一个不可打印的字符......要么你什么也看不到,要么你会看到一些奇怪的符号。
相反,您需要用于%d打印整数,然后printf将正确转换为可打印符号'1'并'0'
作为旁注,养成总是以 printf 语句结束(序列)的习惯,\n因为在许多系统上“刷新输出缓冲区”=实际上打印到屏幕上。请参阅为什么 printf 在调用后不会刷新,除非格式字符串中有换行符?欲了解详情