-PR-
解決
済み

scanf関数について

  • 困ってます
  • 質問No.88787
  • 閲覧数150
  • ありがとう数5
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 85% (6/7)

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

while(scanf("%s",str)>=1){
   ・・・
 }
このwhileループは何が入力されたときに終了するのですか?scanf関数は入力された文字を返り値に持つとわかったので、改行コードを入力しましたが、終了しませんでした。どうすればよいのでしょう。よろしくお願いいたします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル9

ベストアンサー率 71% (59/82)

要はEOF(End-Of-File)を示すキャラクタを入力するんですが、
UNIX系ならCtrl+D、DOSなら確かCtrl+Z。
VCとかはいじったこと無いんですが、何なんでしょう?

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

お礼率 85% (6/7)

やりました。動きましたよ。ありがとうございました。
投稿日時 - 2001-06-13 14:46:53
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル12

ベストアンサー率 41% (324/772)

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

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

ただし、このwhile()の使い方はしくじると無限ループにに陥る可能性があるので正しく使う必要があります。
お礼コメント
akirasuzu

お礼率 85% (6/7)

まだまだ調べ不足でした。ありがとうございました。
投稿日時 - 2001-06-13 14:45:43


  • 回答No.3
レベル12

ベストアンサー率 75% (398/526)

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

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

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

  printf("整数を入力してください。");
  while (! scanf("%d", &a))
    gets(s);
  printf("入力値は%dです。\n", a);
お礼コメント
akirasuzu

お礼率 85% (6/7)

懇切丁寧に説明していただいてありがとうございました。
投稿日時 - 2001-06-13 14:47:42
  • 回答No.4
レベル13

ベストアンサー率 18% (351/1917)

コンソールアプリで Ctrl+ZそしてEnterとすると「EOF」が入り 終了すると思います。 ...続きを読む
コンソールアプリで
Ctrl+ZそしてEnterとすると「EOF」が入り
終了すると思います。
お礼コメント
akirasuzu

お礼率 85% (6/7)

ctrl+ZでEOFが入るんですね。ありがとうございました。
投稿日時 - 2001-06-13 14:48:40
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ