• ベストアンサー

enterでループ終了

#include <stdio.h> int main(void) { char str[255]; int i, len; while (1){ printf("文字列を入力してください:"); if (fgets(str, sizeof(str), stdin) == NULL) { break; } len = strlen(str); if (len > 0 && str[len - 1] == '\n') str[len - 1] = '\0'; if (str[0] == '\0') break; enterで終了するプログラムの例ですが、 if (fgets(str, sizeof(str), stdin) == NULL) のNULLはどういった理由で必要ですか? また、 if (len > 0 && str[len - 1] == '\n') str[len - 1] = '\0'; を消して、 if (str[0] == '\0') break; を、if (str[0] == '\n') break; と書き換えれば、終了すのではないですか?不適な理由がありますか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>if (fgets(str, sizeof(str), stdin) == NULL) >のNULLはどういった理由で必要ですか? 入力時に何らかのエラーを起こす場合があります。 例えば、stdin は、他のファイルからの入力にリダイレクトされている場合があります。 その時にファイルが(デバイスの都合で)読めなかったり、ファイルが終端に達していて読込が継続できない場合があります。 (標準入力からCTRL+Zが入力される場合と同じ) >if (str[0] == '\n') break; >と書き換えれば、終了すのではないですか?不適な理由がありますか? 特別不適な理由はありません。 そのような仕様であるとすることができると思います。 ただ、場合によっては、\r\nの場合を考える必要がある(予防措置)のだったり、 本処理に入る前に\nの処理をしておきたいというのかもしれません。

その他の回答 (1)

  • rancers5
  • ベストアンサー率6% (3/43)
回答No.2

Cでは、文字列の終端をNULLにしないと、終端を判別できません。

関連するQ&A