• 締切済み

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の場合(偽)に繰り返しを抜けます。 なぜなのか分かりません。 どなたか教えてください。

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.5

条件文は論理式とは限りません、というか単に与えられたモノが0か否かで判断しているだけなので論理式でなくても成立します。 #これはifその他の条件分岐やループも全く一緒 ……って事でいいんだろうか。

ya-cha
質問者

お礼

ありがとうございました。

  • itinohana
  • ベストアンサー率41% (58/139)
回答No.4

質問者さんが書かれている通りの動作をしていると思いますが。 >while文は条件が真(0でない)の場合に繰り返し、偽(0)の場合に抜けるという認識なんですが、 と書いている通りなので、 >strcmp()の戻り値が0の場合(偽)に繰り返しを抜けます。 当然、strcmpが0を返したら、Whileを抜けます。 ちなみに、strcmpは比較する文字列が一致した場合に0を返します。 異なっていれば、0以外の整数を返します。 全ての関数において、「0を返す=失敗」ではありません。

ya-cha
質問者

お礼

ありがとうございました。

  • LegaC2
  • ベストアンサー率52% (224/428)
回答No.3

> while文は条件が真(0でない)の場合に繰り返し、偽(0)の場合に抜けるという認識なんですが、上記のwhile文だと、strcmp()の戻り値が0の場合(偽)に繰り返しを抜けます。 偽のときに抜ける認識であれば、偽のときに繰り返しを抜けることに、違和感はないと思いますが、質問文に記述間違いがありますか。 ”strcmp()が0を返す”=”入力された文字列が'stop'である”ということなので、入力された文字が'stop'以外なら処理を繰り返し、'stop'なら処理を終了します。

ya-cha
質問者

お礼

ありがとうございました。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.2

strcmp()の戻り値は「等しいときが0」「等しくない場合が0以外」です。これがまず重要。 do-while文の条件は、式が成り立っている場合=真=0以外にループを継続するため、 strcmp()で文字列が一致した場合の戻り値は「0」であり条件文を抜けます。

ya-cha
質問者

お礼

ありがとうございました。 同じ質問はミスです・・・。 投稿してから気づいたんですが、消し方が分からず・・・

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

http://gihyo.jp/dev/serial/01/c-programming-introduction/0017 ループは、条件が、真である間、繰り返されます。偽になったら、 ループを終了します。

ya-cha
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう