我想在下面编写的程序中使用√
符号。
#include <stdio.h>
main(){
char a='√';
if (a=='√'){
printf("Working");
}
else{
printf("Not working");
}
}
√
不是ASCII,这就是它不起作用的原因。但是我想知道使它起作用。
预先感谢。
答案 0 :(得分:8)
有两件事要注意:
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_t
或unichar
或类似字符),则可以使用这些类型来容纳此字符,并像直接进行相等比较在做:
wchar_t sqrt = L'\u221A';
if (sqrt == L'\u221A') {
...
(仅供参考,这些宽字符类型可能不足以容纳平台上的任意Unicode代码点,因此可能适用于平方根字符,但不适用于表情符号。)
最后,为了完整起见,我感到无比荣幸地承认,鉴于当前的开发环境/工具链和目标平台,您可能可以在宽字符中使用显式字符像这样的字面量:
wchar_t sqrt = L'√';
if (sqrt == L'√') {
....
但是我很老套,这很粗略,我不建议这样做。 :)