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

こんなプログラムがありました。
char str[80];

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

A 回答 (4件)

要はEOF(End-Of-File)を示すキャラクタを入力するんですが、


UNIX系ならCtrl+D、DOSなら確かCtrl+Z。
VCとかはいじったこと無いんですが、何なんでしょう?

ちなみに、例のプログラムの動作を見れば分かると思いますが、
改行記号は%sと%sの区切りとみなされます。他に区切りと認識される
記号は、スペースとタブです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/13 14:46

コンソールアプリで


Ctrl+ZそしてEnterとすると「EOF」が入り
終了すると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/13 14:48

scanfで数値を読み込む場合などには、このような手が使われる場合があります。



scanfは実際に値を入れられたパラメータの数を返します。
例えば"%d"など数値待ちのときに文字列を入力すると、変数側では受け取れないと判断して、値は読み込まれません。
このとき入力した値はバッファ内に残ってしまうので、gets等をつかって読み捨てる必要があります。

例:数値が入力されるまで、入力を無視する。
  int a;
  char s[100];

  printf("整数を入力してください。");
  while (! scanf("%d", &a))
    gets(s);
  printf("入力値は%dです。\n", a);
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/13 14:47

もう一度C言語のリファレンスを読み直してください。


int scanf(char *format [, ...]);
なはずです。
scanfは入力(代入)されたパラメータの数を返します。

したがって[改行コード](またはNullキャラクタ)と
いう文字列がstr[]に格納されるため、scanf()の
戻り値は1となり、whileのループからは抜けません。
ループから抜けるには[EOF]を入力する必要があります。

ただし、このwhile()の使い方はしくじると無限ループにに陥る可能性があるので正しく使う必要があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/13 14:45

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