- ベストアンサー
C言語のif分岐とstrcmpを使った条件記述の失敗
- C言語のif文とstrcmpを使用して、文字列が0又は空白である場合の条件記述を行っていますが、うまくいきません。
- 現在のコードでは、test_wordが0又は空白である場合にも一番最初の処理をしてしまいます。
- コードの修正方法を教えていただきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#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]であるか,又は[空白]であるとき ですよ。これでいいのですか?
その他の回答 (3)
- trapezium
- ベストアンサー率62% (276/442)
空白というより、空文字列、または長さ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)
test_wordが"0"であり,blank_wordが""であれば,strcmp(test_word, blank_word)は0ではない。つまり一番最初の処理をして当然です。
お礼
ありがとうございます。 もしよろしければ正しい記述法を教えて頂けるとうれしいです。
- asuncion
- ベストアンサー率33% (2127/6289)
最初のif文の直前に、test_wordを出力するprintf関数を 入れてみてください。結果はどうなりますか? 推測:test_wordに2文字以上が入っていて、その先頭文字との 比較を行なっていないから、思った結果にならないのでは?
お礼
失礼しました。わかりやすくするため変数test_wordといいましたが、実際は多次元の文字配列test_wordでループさせています。
補足
ご返答ありがとうございます。 確かに今確認したところtest_wordのは0.01を入っています。 スペースの部分は空白です。 結果 0.01 0.01 0.01 0.01
お礼
はい、||でどちらかが真の場合以下の処理をするというつもりで記述していました。