- 締切済み
while文の条件
参考書でC言語を勉強しておりますが、タイトルの件で分からないことがあります。 #include <stdio.h> #include <string.h> void main(void) { char *p = "stop"; char str[80]; do { printf("文字列を入力してください:"); gets(str); }while(strcmp(p , str)); } while文は条件が真(0でない)の場合に繰り返し、偽(0)の場合に抜けるという認識なんですが、上記のwhile文だと、strcmp()の戻り値が0の場合(偽)に繰り返しを抜けます。 なぜなのか分かりません。 どなたか教えてください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- D-Matsu
- ベストアンサー率45% (1080/2394)
条件文は論理式とは限りません、というか単に与えられたモノが0か否かで判断しているだけなので論理式でなくても成立します。 #これはifその他の条件分岐やループも全く一緒 ……って事でいいんだろうか。
- itinohana
- ベストアンサー率41% (58/139)
質問者さんが書かれている通りの動作をしていると思いますが。 >while文は条件が真(0でない)の場合に繰り返し、偽(0)の場合に抜けるという認識なんですが、 と書いている通りなので、 >strcmp()の戻り値が0の場合(偽)に繰り返しを抜けます。 当然、strcmpが0を返したら、Whileを抜けます。 ちなみに、strcmpは比較する文字列が一致した場合に0を返します。 異なっていれば、0以外の整数を返します。 全ての関数において、「0を返す=失敗」ではありません。
お礼
ありがとうございました。
- LegaC2
- ベストアンサー率52% (224/428)
> while文は条件が真(0でない)の場合に繰り返し、偽(0)の場合に抜けるという認識なんですが、上記のwhile文だと、strcmp()の戻り値が0の場合(偽)に繰り返しを抜けます。 偽のときに抜ける認識であれば、偽のときに繰り返しを抜けることに、違和感はないと思いますが、質問文に記述間違いがありますか。 ”strcmp()が0を返す”=”入力された文字列が'stop'である”ということなので、入力された文字が'stop'以外なら処理を繰り返し、'stop'なら処理を終了します。
お礼
ありがとうございました。
- arain
- ベストアンサー率27% (292/1049)
strcmp()の戻り値は「等しいときが0」「等しくない場合が0以外」です。これがまず重要。 do-while文の条件は、式が成り立っている場合=真=0以外にループを継続するため、 strcmp()で文字列が一致した場合の戻り値は「0」であり条件文を抜けます。
お礼
ありがとうございました。 同じ質問はミスです・・・。 投稿してから気づいたんですが、消し方が分からず・・・
- kokorone
- ベストアンサー率38% (417/1093)
http://gihyo.jp/dev/serial/01/c-programming-introduction/0017 ループは、条件が、真である間、繰り返されます。偽になったら、 ループを終了します。
お礼
ありがとうございました。
お礼
ありがとうございました。