- ベストアンサー
scanf関数のループについて
ソースコード---------------------------- #include<stdio.h> int main(){ char c; while(scanf("%c", &c) != 1){;} return(0); } -------------------------------------- 入力された文字数が1文字でない間入力待ちになるようなプログラムを意図しているのですが、 例えばaと打ってもaaと打ってもプログラムが終了してしまいます。 意図したようにプログラムが動作するにはどのように書き換えればよいのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
%cを使うと、連続してscanf関数を使った時にバッファにデータが残っているのでおかしなことになります。 %sを使って文字列の配列に読み込み、strlen関数を使って長さを計算するのが良いと思います。 答えはズバリ書きませんので試行錯誤してみてください。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.3
厳密には EOF を意味する入力 でもループしちゃいますね>#2. ちなみに EOF が -1 とは限らない.
質問者
お礼
ありがとうございました、
- maiko0318
- ベストアンサー率21% (1483/6969)
回答No.2
scanf("%c", &c)は文字の取り込みが成功したら真(1)、 失敗したら偽(0)終わりになったらEOF(-1)を返します。 したがって、scanf("%c", &c) != 1というのは文字の取り込みが失敗する間繰り返す。 =文字の取り込みが成功したら終了します。 よって、何を入れてもループは抜けてしまいます。
お礼
ありがとうございました。