我试图?通过将相应的十进制值传递给printf 来打印出来.输出什么都没有.为什么我的代码不起作用?
#include <stdio.h>
int main()
{
printf("%lc",536);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Mac OS塞拉利昂10.12.2与GCC 6.3.0,如果我运行这个程序(编译自mb37.c成mb37):
#include <locale.h>
#include <stdio.h>
#include <wchar.h> /* wint_t */
int main(void)
{
setlocale(LC_ALL, "");
printf("%lc\n", (wint_t)536);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
$ ./mb37
?
$
Run Code Online (Sandbox Code Playgroud)
我相信,这是所需的输出。如果setlocale()删除该行,则根本不会产生任何输出——甚至不会产生换行符。使用的语言环境是en_US.UTF-8;我的终端也处理 UTF-8。语言环境名称是通过捕获并打印来自setlocale()- 常规字符串的返回值来找到的。
所述wint_t铸造是半可选的; 碰巧的是,没有强制转换或<wchar.h>标头的 64 位编译也会产生相同的输出,但有一个轻微的巧合wint_t与int. 这需要一些跟踪;wint_t定义为__darwin_wint_t定义为__darwin_ct_rune_t定义为int。为了便于移植,演员阵容是必要的。在某些系统上,可能没有必要(而 macOS Sierra 就是这样一种系统)。
中的换行符printf()不是 100% 必要的,但如果它被省略,下一个提示会紧跟在 U+0218 LATIN CAPITAL LETTER S WITH COMMA BELOW 之后。最好确保输出以换行符结尾。
gna*_*729 -1
C 中不要求打印末尾没有换行符的行。尝试“%lc\n”。