赋值运算符的错误使用举例

=和==运算符的错误使用

  • =运算符在C语言中为赋值运算符,==运算符为检查符号两边的值是否是相等的操作。
  • 当某些程序的本意是比较运算符的时候,可能会无疑写成了赋值运算符,比如下面的程序,本意是要检查x是否等于y,但是实际上是把y的值的赋值给了x,然后去检查y的值是否为0
if(x==y)
	break;
  • 再看下面的这个例子,例子中的循环语句本意是跳过文件中的空格符,制表符和换行号
while(c=' '||c=='\t'||c=='\n')
    g=getc(f);
  • 由于在比较字符’ '和变量c时,错误的将比较运算符==写成了赋值运算符=,因为赋值运算符的优先级要低于逻辑运算符||,所以上面代码的实既含义时将下列的表达式赋值给了c
' '||c=='\t'||c=='\n'
  • 因为’ '不等于0(ANCII码值为32),那么无论变量c之前的值到底是多少,上述表达式的结果永远都是1,因此,循环会一直进行下去,指导整个文件结束,文件结束之后循环是否还会继续执行,这取决于getc库函数的具体实现,在文件指针到达文件节为之后是否还允许继续读取字符,如果允许继续读取字符,那么循环就会一直进行,从而就会形成一个死循环。

你可能感兴趣的:(C/C++,c语言)