如何在C中使用√符号

时间:2019-03-16 00:46:23

标签: c

我想在下面编写的程序中使用符号。

#include <stdio.h>
main(){
    char a='√';
    if (a=='√'){
        printf("Working");
    }
    else{
        printf("Not working");
    }
}

不是ASCII,这就是它不起作用的原因。但是我想知道使它起作用。 预先感谢。

1 个答案:

答案 0 :(得分:8)

有两件事要注意:

  1. 源C文件本身可能无法正确包含此字符。
  2. 实际程序的语义中的char类型也不支持此字符。

对于第一个问题,它取决于您的平台(等),但是对于C源代码而言,保守性是最可移植的,这意味着仅在代码文件内坚持ASCII字符。这意味着,例如,在注释中以及在有意义的代码中。也就是说,许多平台都将允许并支持源文件中的Unicode字符。

关于第二个,char是老式的,因为它包含字符,并且被限制为一个八位字节,这意味着arbitrary unicode characters的值大于0xFF根本不适合它们。我想一些非ASCII字符会以平台相关的方式(Windows代码页?)在值0x7F之上,但是在这种情况下,我会将其视为字符串,对此字符使用unicode转义序列:"\u221A"

char * sqrt = "\u221A";
if (strcmp(sqrt, "\u221A") == 0) {
    printf("Working");
} else {
    printf("Not working");
}

要注意的是,C字符串(char*)也不是真的围绕非ASCII字符设计的,因此在这种情况下,您最终将UTF8编码的字符表示形式(长3个字节)嵌入到其中字符字符串。这行得通,保留了值,比较也行了,但是如果您要更广泛地使用unicode ...

如果您的平台支持可以容纳Unicode字符的“宽字符”(wchar_tunichar或类似字符),则可以使用这些类型来容纳此字符,并像直接进行相等比较在做:

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

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


最后,为了完整起见,我感到无比荣幸地承认,鉴于当前的开发环境/工具链目标平台,您可能可以在宽字符中使用显式字符像这样的字面量:

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

但是我很老套,这很粗略,我不建议这样做。 :)