• 締切済み

scanf の%10s について

初歩すぎる質問でもうしわけありませんが、 str[100]という配列を用意して 無限ループ内に while(1){ printf("入力してください>>>"); scanf("%10s",str); } などとして、実行して 10文字以上入力すると、 「入力してください>>>」が一回ではなく 「入力してください>>>入力してください>>>」 のように複数でるのですが、なぜでしょうか?? なにがおきているのでしょうか??

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

10文字より多く(以上ではありませんね)入力した場合、初回のscanfではすべての文字を消化し切れません。 ですから、 printf("入力してください>>>"); scanf("%10s",str); /* ← ここで、0123456789abcd と入力 */ /* この時点で、str には 0123456789 が格納され、入力ストリームには abcd が残る */ printf("入力してください>>>"); /* (1) */ scanf("%10s",str); /* 先ほどの食べ残しである abcd が str に格納される */ printf("入力してください>>>"); /* (2) */ scanf("%10s",str); /* ← 入力ストリームが空になっているので、入力待ちに入る */ という訳で、上記の(1)および(2)の「入力してください>>>」が連続して出力されるのでしょう。 ただし、標準出力のバッファリングの仕様しだいでは、必ずしもこの動作になりませんのでご注意ください。