如何在C语言中使用√符号


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"

    1
    2
    3
    4
    5
    6
    char * sqrt ="\\u221A";
    if (strcmp(sqrt,"\\u221A") == 0) {
        printf("Working");
    } else {
        printf("Not working");
    }

    请注意,C 字符串 (char*) 也不是真正围绕非 ASCII 字符设计的,因此在这种情况下,您最终会将字符的 UTF8 编码表示形式(长度为三个字节)嵌入到 char 中细绳。这有效,保留了值,并且比较有效,但是如果您要更普遍地使用 unicode...

    如果您的平台支持可以保存 Unicode 字符的"宽字符"(wchar_tunichar 或类似字符),那么您可以使用这些类型来保存该字符,并像之前一样进行直接相等比较:

    1
    2
    3
    wchar_t sqrt = L'\\u221A';
    if (sqrt == L'\\u221A') {
        ...

    (仅供参考,请注意,这些宽字符类型对于您平台上的任意 Unicode 代码点可能不够宽,因此可能适用于平方根字符,但不适用于表情符号。)

    最后,为了完整起见,我很荣幸地承认,考虑到现代开发环境/工具链和目标平台,您可能可以像这样在宽字符文字中使用显式字符:

    1
    2
    3
    wchar_t sqrt = L'√';
    if (sqrt == L'√') {
        ....

    但是我比较老套,感觉很粗略,不推荐。 :)