こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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;
と書き換えれば、終了すのではないですか?不適な理由がありますか?

投稿日時 - 2006-01-20 00:46:39

QNo.1908148

暇なときに回答ください

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

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

投稿日時 - 2006-01-20 03:42:29

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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

投稿日時 - 2006-02-01 06:22:54

あなたにオススメの質問