• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 if分岐 strcmp)

C言語のif分岐とstrcmpを使った条件記述の失敗

このQ&Aのポイント
  • C言語のif文とstrcmpを使用して、文字列が0又は空白である場合の条件記述を行っていますが、うまくいきません。
  • 現在のコードでは、test_wordが0又は空白である場合にも一番最初の処理をしてしまいます。
  • コードの修正方法を教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8467/18126)
回答No.3

#2です。 0又は空白ではないの処理と書いているが,実際にやりたいのは0でもなく空白でもないときの処理ですよね。そうであれば if ((strcmp(test_word, blank_word) != 0) && (strcmp(test_word,miss_word) != 0)) { とします。 ついでに else if (strcmp(test_word, blank_word) == 0 || strcmp(test_word, miss_word) == 0 && flag == 1) { の方ですけど,flag==1はどういう意図で書いているのだろうか?書いてある通りに解釈すると 0又は空白である場合の処理 ではなくて [0であってflagが1]であるか,又は[空白]であるとき ですよ。これでいいのですか?

losloson
質問者

お礼

はい、||でどちらかが真の場合以下の処理をするというつもりで記述していました。

その他の回答 (3)

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.4

空白というより、空文字列、または長さ0の文字列ですよね。 それなら test_word[0] == '\0' または strlen(test_word) == 0 とか、リテラルとの比較なら #define BLANK_WORD "" #define MISS_WORD "0" if (strcmp(test_word, BLANK_WORD) && strcmp(test_word, MISS_WORD)) みたいにした方が良いと思います。

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.2

test_wordが"0"であり,blank_wordが""であれば,strcmp(test_word, blank_word)は0ではない。つまり一番最初の処理をして当然です。

losloson
質問者

お礼

ありがとうございます。 もしよろしければ正しい記述法を教えて頂けるとうれしいです。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

最初のif文の直前に、test_wordを出力するprintf関数を 入れてみてください。結果はどうなりますか? 推測:test_wordに2文字以上が入っていて、その先頭文字との 比較を行なっていないから、思った結果にならないのでは?

losloson
質問者

お礼

失礼しました。わかりやすくするため変数test_wordといいましたが、実際は多次元の文字配列test_wordでループさせています。

losloson
質問者

補足

ご返答ありがとうございます。 確かに今確認したところtest_wordのは0.01を入っています。 スペースの部分は空白です。 結果 0.01 0.01 0.01 0.01

関連するQ&A