c - 为什么 %c 格式说明符在以下代码中不起作用?
问题描述
我刚刚开始阅读有关 C 的内容,目前正在使用格式说明符。这是代码示例:
#include <stdio.h>
int main(void) {
char code = 'a' - 'A';
printf("\n>>>%c (%d)", code, code);
printf("\n>>>%c", 32);
char incode;
printf("\n\nGive me some char: ");
scanf("%c", &incode);
printf("\n>>>%c (%d)", incode, incode);
return 0;
}
输出:
PS C:\ex> ./print
>>> (32)
>>>
Give me some char: A
>>>A (65)
那么,为什么%c
在最后printf
起作用而在开始时不起作用?我在 Windows 和 Linux 上测试了这个示例,两者的行为相同。
- Windows 编译器:
gcc.exe (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
- Linux编译器:
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
解决方案
ASCII 32 是' '
(空格)。打印好了,就是看不到。
如果您将格式字符串更改为,"\n>>>%c<< (%d)"
您将在(双关)负号空格中看到它。
您也可以通过输出od -a
来确认。
推荐阅读
- android - 无法将 java.util.HashMap 类型的值转换为 String 并且应用程序崩溃
- spring - 如何使用 Spring WebClient 同时进行多个调用?
- ios - 使用响应式编程将带有 imageURL 的对象转换为带有下载的 UIImage 的对象
- ruby-on-rails - Rails 有很多通过 fields_for
- python - 复杂数据的曲线拟合
- python - AttributeError:模块“pygmsh”没有属性“generate_mesh”
- php - 尽管左加入,但 ID 丢失
- javascript - 两个元素,一个滚动条,都不滚动出平面
- cmake - CMake 3.11 不生成 Visual Studio 解决方案文件 (.sln)
- typescript - Function 类型的剩余参数类型