本节书摘来自华章出版社《C语言解惑》一 书中的第1章,第1.1节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.1 中文字符以假乱真
不管是初学者还是有经验的程序员,都会碰到这个问题。这往往是在拼音状态下输入标点符号之类的字符造成的。假设语句
printf("%s","OK");
中的“,”号是中文字符,编译器会给出如下信息:
error C2018: unknown character '0xa3'
error C2018: unknown character '0xac'
注意:只要给出“0xa”的标识,就可断定该行存在中文字符。
只要稍微注意一下就可以避免这个错误。其实,多数的错误不是在输入程序时误输入,而是直接将Word文档里或网上的程序拷贝到源文件中造成的。一般是因为整理文档里的程序时,人为地使用中文字符或插入图形符号,例如&、[、] 、& 、# 、﹨等符号。
只要编译系统给出出错信息并定位到所在行,就很容易判断出错误。有点难度的是中文空格,这个空格一般有三种情况:一行的首、尾和其他位置。假设下面程序除第1行之外,其他行的首尾均有空格,看看这类错误的表现形式。
#include <stdio.h>
void main( )
{
printf("%s\n","OK"); //打印输出
}
当编译给出第二行有错误的信息时,可以把鼠标光标放到第一行的尾部,按一下“↓”键,这时光标移到下一行并停在离“)”的一段距离处,这说明光标左边有中文空格。用Backspace键删除前面的空格,删到“)”处即可。如果将光标放在“#”处,按一下“↓”键,光标会停在离字母“v”的一段距离处,使用删除键删除右边的空格即可。
其他各行同样处理,对于第4行,如果“//”号的字体不是绿色的,说明注释语句之前有空格,注释不起作用,往左边删除,直到“//”号变为绿色。
需要注意的是,编译拷贝的程序时,可能会给出很多错误信息,而且可能给出的错误种类也很多。如果第1个错误就有“0xa”的标识,则一定要先解决它。有时解决它之后,其他的错误可能就没有了。