How to use √ symbol in C
我想在下面写的程序中使用√符号。
1 2 3 4 5 6 7 8 9 10
| #include <stdio.h>
main (){
char a ='√';
if (a =='√'){
printf("Working");
}
else{
printf("Not working");
}
} |
√ 不是 ASCII,这就是它不起作用的原因。但我想知道让它发挥作用。
提前致谢。
这里有两件不同的事情需要注意:
源 C 文件本身可能无法正确包含此字符。
实际程序语义中的 char 类型也不支持该字符。
至于第一个问题,它取决于您的平台(等),但保守地使用 C 源代码是最可移植的,这意味着仅在代码文件中坚持使用 ASCII 字符。这意味着,例如,在注释中以及在有意义的代码中。也就是说,许多平台将允许并支持源文件中的 Unicode 字符。
关于第二个,char 是老式的用于包含字符,并且仅限于八位字节,这意味着值大于 0xFF 的任意 unicode 字符不适合它们。我想一些非 ASCII 字符以平台相关的方式(Windows 代码页?)高于值 0x7F,但在这种情况下,我会将其视为字符串,对此字符使用 unicode 转义序列:"\\u221A"。
请注意,C 字符串 (char*) 也不是真正围绕非 ASCII 字符设计的,因此在这种情况下,您最终会将字符的 UTF8 编码表示形式(长度为三个字节)嵌入到 char 中细绳。这有效,保留了值,并且比较有效,但是如果您要更普遍地使用 unicode...
如果您的平台支持可以保存 Unicode 字符的"宽字符"(wchar_t 或 unichar 或类似字符),那么您可以使用这些类型来保存该字符,并像之前一样进行直接相等比较:
1 2 3
| wchar_t sqrt = L '\\u221A';
if (sqrt == L '\\u221A') {
... |
(仅供参考,请注意,这些宽字符类型对于您平台上的任意 Unicode 代码点可能不够宽,因此可能适用于平方根字符,但不适用于表情符号。)
最后,为了完整起见,我很荣幸地承认,考虑到现代开发环境/工具链和目标平台,您可能可以像这样在宽字符文字中使用显式字符:
1 2 3
| wchar_t sqrt = L '√';
if (sqrt == L '√') {
.... |
但是我比较老套,感觉很粗略,不推荐。 :)
- 我正在使用 printf("%s",sqrt); 但它不打印 √。那么如何打印 sqrt 的值。
-
@Saurabh:这是 sqrt 的 char* 字符串版本吗?如果是这样,这种带有 printf 的格式适用于 Im 使用的系统并显示根符号。你用的是什么平台?
-
我在我兄弟的笔记本电脑上使用 arch linux 中的 gcc 进行了尝试,并且可以正常工作。
-
行。它在铿锵声下也对我有用。我的猜测是,当被要求"显示"其中包含 UTF8 字节内容的字符串时,printf 在不同平台下的行为可能会有所不同。底层的 printf 实现正在以不同的方式格式化字符串,或者您在 Android 上拥有的控制台视图对 unicode 输出不满意,并且没有按照您的意愿显示它。
-
如果您正在使用 Unicode 字符串,并且还有其他问题,请打开一个新问题,其中包含有关平台、期望和需求的详细信息。