「C言語/制御文」の版間の差分

削除された内容 追加された内容
レイアウト調整
if文での文字列の比較
256 行
 
なお、上の(非Visual C系のコードの)例は &&演算子 を用いて、次のように簡潔に書き換えることができる。
 
<syntaxhighlight lang="C">
// 例 if文で&&演算子を用いる。
269 ⟶ 270行目:
}
</syntaxhighlight>
 
 
==== if文での文字列の比較 ====
C言語のif文で、ある文字列変数が、指定する文字列に等しいかどうかを判定するには、
 
<code>==</code> ではなく、<code>!strcmp</code>をつかわなければいけない。
なお、strcmpを使うためには <code>#include "string.h"</code> で string.h をインクルード(導入)する必要がある(しないとエラーになる)。
 
JavaScriptなど他のプログラム言語では文字列の比較の際に <code>==</code> を使えるものもあるが、しかしC言語はそうなっていないので、混同しないようにしよう。(よくやるミスで、C言語なのに文字列の比較で <code>==</code> を使ってバグになる。 )
 
<!-- C言語の書籍で、市販の入門書では、あまりstrcmpについて書かれてないですが、しかしJavaScriptなど近代的な言語では文字列どうしの比較が出来て当然なので、対応のため本wikiでも入門レベルの単元で strcmp を紹介します。 -->
 
なお、C言語のif文などの論理式で、文字列の比較で <code>==</code> を使っても、コンパイラはエラーを返さないので、注意しよう。コンパイルされるが、意図した通りの動作になっていないので、初心者だとバグの発見が遅れやすい。
 
 
なお <code>strcmp</code> 関数は文字列どうしを比較して、一致したときに(1ではなく)0を返す組み込み関数である。
 
if文では、真は「1」で表すので、strcmpを使う場合には、下記コードのように論理否定「!」で反転する必要がある。
 
if文では「1」は真、「0」は偽だからである。
 
 
;コード例
<syntaxhighlight lang="C">
#include "stdio.h"
#include "string.h"
 
int main(void)
{
char a[30] = "taro";
if( !strcmp(a, "taro") ){
printf("太郎だった \n");
}
if( ! !strcmp(a, "taro") ){
printf("太郎でない \n");
}
}
 
</syntaxhighlight>
 
;実行結果
太郎だった
 
 
* 備考
文字列の比較にかぎらず、C言語では、文字列の処理はやや特殊であり、<code>=</code> や <code>==</code> などのイコール記号が使えないか、使えたとしても初心者の意図する動作にならない。
 
文字列の取扱に関しては、C言語では str○○ のような名称の組み込み関数がいくつか用意されているので、C言語での文字列処理では、str○○ などの組み込み関数を使う必要がある。