• ベストアンサー

scanf関数のループについて

ソースコード---------------------------- #include<stdio.h> int main(){ char c; while(scanf("%c", &c) != 1){;} return(0); } -------------------------------------- 入力された文字数が1文字でない間入力待ちになるようなプログラムを意図しているのですが、 例えばaと打ってもaaと打ってもプログラムが終了してしまいます。 意図したようにプログラムが動作するにはどのように書き換えればよいのでしょうか。

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

  • ベストアンサー
  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

%cを使うと、連続してscanf関数を使った時にバッファにデータが残っているのでおかしなことになります。 %sを使って文字列の配列に読み込み、strlen関数を使って長さを計算するのが良いと思います。 答えはズバリ書きませんので試行錯誤してみてください。

Kdesky
質問者

お礼

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

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

厳密には EOF を意味する入力 でもループしちゃいますね>#2. ちなみに EOF が -1 とは限らない.

Kdesky
質問者

お礼

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

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.2

scanf("%c", &c)は文字の取り込みが成功したら真(1)、 失敗したら偽(0)終わりになったらEOF(-1)を返します。 したがって、scanf("%c", &c) != 1というのは文字の取り込みが失敗する間繰り返す。 =文字の取り込みが成功したら終了します。 よって、何を入れてもループは抜けてしまいます。

関連するQ&A