讀古今文學網 > C語言解惑 > 3.5 不要用錯等於運算符 >

3.5 不要用錯等於運算符

【例3.9】下面程序正確嗎?


#include <stdio.h>
void main 
( 
)
{
         char ch
,c='H'
;
         char st[3]
,s="Hellow"
;
         ch=c
;
         st=s
;
         printf
("%c
,%s\n"
,ch
,st
);
}
  

編譯給出:


error C2106
: '=' 
: left operand must be l-value
  

字符有「=」運算符,但字符串沒有,所以語句「st=s;」不正確。解決的辦法是使用strcpy函數,使用時包含定義它的頭文件string.h即可。

【例3.10】使用strcpy函數的例子。


#include <stdio.h>
#include <string.h>
void main 
( 
)
{   
         char ch
,c='H'
;
         char st[3]
,s="Hellow"
;
         ch=c
;
         strcpy
(st
,s
);
         printf
("%c
,%s\n"
,ch
,st
);
}
  

輸出結果為:


H
, Hellow
  

注意不要混淆數學運算符「=」和比較運算符「==」。

【例3.11】想在下面的程序中得到的輸出是「5不等於6」,能實現嗎?


#include <stdio.h>
void main 
( 
)
{
    int a=5
, b=6
;
    if
(a=b
)
              printf
("%d
等於%d\n"
,a
,b
);
    else     printf
("%d
不等於%d\n"
,a
,b
);
}
  

這裡將比較運算符「==」錯認為賦值運算符「=」。因為「a=b」使用等於運算符,所以使a的值為6。也就是if的表達式為6而不是0,根據if(6)不為0的條件,應執行else後面的語句,輸出結果為「6不等於6」,這顯然是錯誤的。

將if表達式改為


if
(a==b
)
  

則輸出結果為:


5
不等於6