dポイントプレゼントキャンペーン実施中!

C言語の勉強をしております。

http://oshiete1.goo.ne.jp/qa4436782.html

での質問に付随することなのですが、新しく立てさせていただきました。

キーボードからの入力で、何も入力されない場合にループから抜けたいんですが、以下のように記述すると、fgetsが飛ばされてしまいました。

char buffer[80];
int i;
for(i = 0; i < 1000; i++){
memset(buffer, 0, sizeof(buffer));
  printf("登録する名前を入力してください:");
fgets(buffer, sizeof(buffer)-1, stdin);
/* 名前が未入力でEnterされた場合 */
if(buffer[0] == '\n'){
/* ループを抜ける */
  break;
  }
}
sscanf(buffer, "%s", work_pt->names);

1回目のループで未入力とすると正常にループから抜けるんですが、
データを1度入力してから2回目の入力で未入力とすると、
「登録する名前を入力してください:」の表示後、ループから抜けてしまいます・・・。

どなたか原因と解決策の分かる方がおられたら教えていただけないでしょうか?

A 回答 (3件)

sscanfのタイミングが悪いと思いますよ。


fgetsで/* 名前が未入力でEnterされた場合 */のbufferを使用して、sscanf()
を実行しているために、sscanf内で何か不正な動作をしているのではないでしょうか。

----------------------------------------------------------------------
  char buffer[80];
  int i;
  for(i = 0; i < 1000; i++){
    memset(buffer, 0, sizeof(buffer));
    printf("登録する名前を入力してください:");
    fgets(buffer, sizeof(buffer)-1, stdin);
    /* 名前が未入力でEnterされた場合 */
    if(buffer[0] == '\n'){
      /* ループを抜ける */
      break;
    }
    sscanf(buffer, "%s", work_pt->names);
  }
----------------------------------------------------------------------
としてみてはどうでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。

色々試行錯誤し、strlenで入力文字数が0かどうかを判断させるようにしてしまいました。

アドバイスありがとうございました。

お礼日時:2008/10/29 16:12

あ~の~


「1回目のループで未入力の場合」, 「2回目のループで未入力の場合」のそれぞれでどのように表示されるのか」, 「どのような動作を期待しているのか」をお示しいただけませんか?
って書いたんですけど, 意味がわかりませんか? いや, 確かにかぎかっこの対応は変ですけど (すみません)....
・「1回目のループで未入力の場合」には「なにも表示されない」のですか?
・「2回目のループで未入力の場合」というのは「1回目だけデータを入力した」ということなんでしょうけど, このときには「登録する名前を入力してください:」の表示はどこで何回ありますか?
・期待されている動作がやはり分かりません. どのようなときにどのような表示がされることを期待しているのですか? そして, どのようなデータであることを望んでいるのですか?
    • good
    • 0
この回答へのお礼

熱心なご指摘ありがとうございます。

色々試行錯誤して、とりあえず解決いたしました。

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

お礼日時:2008/10/29 16:13

「未入力」=「なにもいれず改行だけした」ということでしょうか?


「1回目のループで未入力の場合」, 「2回目のループで未入力の場合」のそれぞれでどのように表示されるのか」, 「どのような動作を期待しているのか」をお示しいただけませんか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>「未入力」=「なにもいれず改行だけした」ということでしょうか?
はい、その通りです。

>「1回目のループで未入力の場合」
ループを抜けました。期待通りです。

>「2回目のループで未入力の場合」
「登録する名前を入力してください:」の表示後、ループから抜けてしまいます。
これは期待と違います。ループから抜ける判定で抜けることなく先頭へ戻ってしまい、上記入力要求メッセージが出力されてしまいます。

お礼日時:2008/10/29 14:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!