编写此代码是为了"查找给定字符是否为数字"

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

这是经过编译的,但在接受输入后,它没有给出任何输出.

推荐答案

C中的字符实际上只是令牌表中的数字.%c主要用于在人类喜欢读/写的字母数字标记表和C程序内部使用的原始二进制之间进行转换.

表达式ch>='0'&&ch<='9'的计算结果为10,这是int类型的原始二进制整数(在C++中为bool类型).如果您try 用%c打印该字符,您将得到索引为0或1的symbol table character,这甚至不是可打印字符(0-31不可打印).所以你打印了一个不可打印的字符...要么你什么都看不到,要么你会看到一些奇怪的符号.

相反,您需要使用%d打印整数,然后printf将正确转换为可打印符号'1''0'


顺便说一句,要养成习惯,总是以\n结束(一系列)printf语句,因为在许多系统上,"刷新输出缓冲区"=实际打印到屏幕上.详见Why does printf not flush after the call unless a newline is in the format string?

C++相关问答推荐

变量>;-1如何在C中准确求值?

为什么我一直收到分段错误?

如何在ASM中访问C struct 成员

如何在CANbus RX/TX FIFO起始地址寄存器(ATSAME 51)的特定地址初始化数组?

什么是.c.h文件?

为什么函数是按照定义的顺序执行的,而不是按照从avr-c中的int main()调用的顺序执行的?

For循环中的变量行为不符合预期.[C17]

S和查尔有什么不同[1]?

C11/C17标准允许编译器清除复合文字内存吗?

运行时错误:在索引数组时加载类型为';char';`的空指针

为什么我在我的代码中得到错误和退出代码-1073741819(0xC0000005),但如果我添加了一个不相关的打印语句,它仍然有效?

传递给函数的 struct 中的数组

生成的头文件不包括用户定义的文件

为什么GCC不能在 struct 初始值设定项中以sizeof作为条件的三进制中处理复合文字的编译时求值?

变量值不正确的问题

如何使crc32的结果与cksum匹配?

'printf("%s", user_input)' 危险吗?

这些表达式是否涉及 C 中定义的复合文字?

Rust 的 (void) 变量替代品

用C程序读取.txt文件并解析,如何处理空字段