• ベストアンサー

scanf関数について

こんなプログラムがありました。 char str[80]; while(scanf("%s",str)>=1){    ・・・  } このwhileループは何が入力されたときに終了するのですか?scanf関数は入力された文字を返り値に持つとわかったので、改行コードを入力しましたが、終了しませんでした。どうすればよいのでしょう。よろしくお願いいたします。

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

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.2

要はEOF(End-Of-File)を示すキャラクタを入力するんですが、 UNIX系ならCtrl+D、DOSなら確かCtrl+Z。 VCとかはいじったこと無いんですが、何なんでしょう? ちなみに、例のプログラムの動作を見れば分かると思いますが、 改行記号は%sと%sの区切りとみなされます。他に区切りと認識される 記号は、スペースとタブです。

akirasuzu
質問者

お礼

やりました。動きましたよ。ありがとうございました。

その他の回答 (3)

  • coolguys
  • ベストアンサー率18% (351/1917)
回答No.4

コンソールアプリで Ctrl+ZそしてEnterとすると「EOF」が入り 終了すると思います。

akirasuzu
質問者

お礼

ctrl+ZでEOFが入るんですね。ありがとうございました。

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

scanfで数値を読み込む場合などには、このような手が使われる場合があります。 scanfは実際に値を入れられたパラメータの数を返します。 例えば"%d"など数値待ちのときに文字列を入力すると、変数側では受け取れないと判断して、値は読み込まれません。 このとき入力した値はバッファ内に残ってしまうので、gets等をつかって読み捨てる必要があります。 例:数値が入力されるまで、入力を無視する。   int a;   char s[100];   printf("整数を入力してください。");   while (! scanf("%d", &a))     gets(s);   printf("入力値は%dです。\n", a);

akirasuzu
質問者

お礼

懇切丁寧に説明していただいてありがとうございました。

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

もう一度C言語のリファレンスを読み直してください。 int scanf(char *format [, ...]); なはずです。 scanfは入力(代入)されたパラメータの数を返します。 したがって[改行コード](またはNullキャラクタ)と いう文字列がstr[]に格納されるため、scanf()の 戻り値は1となり、whileのループからは抜けません。 ループから抜けるには[EOF]を入力する必要があります。 ただし、このwhile()の使い方はしくじると無限ループにに陥る可能性があるので正しく使う必要があります。

akirasuzu
質問者

お礼

まだまだ調べ不足でした。ありがとうございました。

関連するQ&A