• ベストアンサー

scnafの戻り値を使って処理を中止したい。

何も標準入力より入力しなかったとき、scanfの戻り値は-1なので、-1じゃないとき処理継続にしても 期待どおりの結果が得られませんでした。どうしたらよいでしょうか? #include <stdio.h> int main(void){ int i; int seisu[10]; i = 0; while (i < 10 && -1 != scanf("%d", &seisu[i])) { i++; } }

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

  • ベストアンサー
回答No.2

> 何も標準入力より入力しなかったとき、scanfの戻り値は-1なので この認識が間違いなんじゃないかな? scanfがEOFを返すのは、変換以前に問題があった場合で、標準入力がリダイレクトされていて、リダイレクトされたファイルがすでに終端まで達しているといった場合なんじゃないかと思う。 ENTERキーだけで進んだ場合は、変換失敗で0が返ってくるのでは?

hunt9999
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

数字でも空白でも無い文字を入力してしまった場合 ・"%d"で変換できないので、戻り値「変換できた個数」は0 ・ファイルポインタは、読み込めなかった位置から移動しないので、何の対策もなく次にscanfしても、戻り値0 となり、EOFになりません。(-1とか直接書かない方がいいです) 正常に読めたかどうかは、%~の数と一致するかどうかで調べる方が確実です。 #2さん scanf系では、改行は空白扱いです。 Enterを押し続けたら、ひたすら読み飛ばし続けて返ってこないだけです。

hunt9999
質問者

お礼

thanks for your sincere answer!

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「1 だったら続ける」って書かないのはなぜ?

hunt9999
質問者

お礼

どうも!

関連するQ&A

専門家に質問してみよう