- ベストアンサー
scanf関数について
こんなプログラムがありました。 char str[80]; while(scanf("%s",str)>=1){ ・・・ } このwhileループは何が入力されたときに終了するのですか?scanf関数は入力された文字を返り値に持つとわかったので、改行コードを入力しましたが、終了しませんでした。どうすればよいのでしょう。よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
要はEOF(End-Of-File)を示すキャラクタを入力するんですが、 UNIX系ならCtrl+D、DOSなら確かCtrl+Z。 VCとかはいじったこと無いんですが、何なんでしょう? ちなみに、例のプログラムの動作を見れば分かると思いますが、 改行記号は%sと%sの区切りとみなされます。他に区切りと認識される 記号は、スペースとタブです。
その他の回答 (3)
- coolguys
- ベストアンサー率18% (351/1917)
コンソールアプリで Ctrl+ZそしてEnterとすると「EOF」が入り 終了すると思います。
お礼
ctrl+ZでEOFが入るんですね。ありがとうございました。
- leaz024
- ベストアンサー率75% (398/526)
scanfで数値を読み込む場合などには、このような手が使われる場合があります。 scanfは実際に値を入れられたパラメータの数を返します。 例えば"%d"など数値待ちのときに文字列を入力すると、変数側では受け取れないと判断して、値は読み込まれません。 このとき入力した値はバッファ内に残ってしまうので、gets等をつかって読み捨てる必要があります。 例:数値が入力されるまで、入力を無視する。 int a; char s[100]; printf("整数を入力してください。"); while (! scanf("%d", &a)) gets(s); printf("入力値は%dです。\n", a);
お礼
懇切丁寧に説明していただいてありがとうございました。
- selenity
- ベストアンサー率41% (324/772)
もう一度C言語のリファレンスを読み直してください。 int scanf(char *format [, ...]); なはずです。 scanfは入力(代入)されたパラメータの数を返します。 したがって[改行コード](またはNullキャラクタ)と いう文字列がstr[]に格納されるため、scanf()の 戻り値は1となり、whileのループからは抜けません。 ループから抜けるには[EOF]を入力する必要があります。 ただし、このwhile()の使い方はしくじると無限ループにに陥る可能性があるので正しく使う必要があります。
お礼
まだまだ調べ不足でした。ありがとうございました。
お礼
やりました。動きましたよ。ありがとうございました。