gpt4 book ai didi

c - 编译后不显示 %c 和其他符号(例如 "° ")

转载 作者:太空宇宙 更新时间:2023-11-04 04:43:59 25 4
gpt4 key购买 nike

我刚开始学习C,然后想继续学习C++。我目前正在使用教科书,只是编写示例,以便更熟悉编程语言和程序。

由于书上给的例子不行,我就找了其他类似的代码。问题是编译代码后,程序本身并没有显示%c所代表的符号的和。我得到了数字 33-126 的符号,但其他一切要么什么都没有,要么只是一个白色 block ...

此外,在之前的一些示例中,我想为温度编写 °C,但它无法显示符号 °

我在网上找到的不显示%c符号的例子是

#include <stdio.h>
#include <ctype.h>

int main()
{
int i;
i=0;
do
{
printf("%i %c \n",i,i);
i++;
}
while(i<=255);
}

有人知道吗?为什么我无法获得 %c 的输出或例如° 还有???

最佳答案

ASCII是一个7 位 字符集,这意味着它仅包含 [0, 127] 范围内的代码点。对于 8 位 code pages仍然有 128 个可用代码点,其值从 128 到 255(即设置了高位)。这些有时称为 extended ASCII (尽管它们与 ASCII 完全无关)并且它们映射到的字符取决于 character set . 8 位字符集有时也称为 ANSI虽然它是 actually一个misnomer

美国英语 Windows 使用 Windows-1252默认代码页,字符 ° 位于代码点 0xB0。其他操作系统/语言可能使用不同的字符集,这些字符集对 ° 有不同的代码点,或者可能根本没有 ° 符号。

对此你有很多解决方案:

  • 如果您的 PC 使用 8 位字符集
    • 在您的计算机使用的字符集中查找° 的值并正常打印。例如,如果您使用 CP437然后 printf("\xF8") 将起作用,因为 ° 位于代码点 0xF8。 printf("°") 如果您将源文件保存在同一代码页 (CP437) 中,也可以使用
    • 或者只需将字符集更改为 Windows-1252/ISO 8859-1 并打印 '°''\xB0'。这可以通过编程方式(在 Windows 上使用 SetConsoleOutputCP,在其他操作系统上使用类似的 API)或手动(通过某些控制台设置,或通过在 Windows cmd 中运行 chcp 1252)来完成。源码文件还是需要保存在同一个代码页
  • 打印 Unicode .这是推荐的方法
    • Linux/Unix 和大多数其他现代操作系统都使用 UTF-8,因此只需输出正确的 UTF-8 字符串即可,您无需关心任何事情。但是,由于 ° 是 UTF-8 中的多字节序列,您必须将其打印为字符串。这意味着您需要使用 %s 而不是 %c。单个字符不能表示 UTF-8 中的 °。较新的 Windows 10 也 supports UTF-8 as a locale所以你可以直接打印UTF-8字符串
    • 关于 older Windows您需要将字符串打印为 UTF-16。这有点棘手,但并非不可能

如果您使用 "\u00B0" 并且打印成功,那么这意味着您的终端已经在使用 UTF-8。 \u 是任意 Unicode 代码点的转义序列

另见

关于c - 编译后不显示 %c 和其他符号(例如 "° "),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23029010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com