C言語関係掲示板

過去ログ

No.346.scanfの食い残し

[戻る] [ホームページ]

No.2235

C言語の初歩的質問です
投稿者---どんちゃん(2002/07/30 00:23:10)


C言語の初心者です。
勉強中で簡単なサンプルプログラムを組んだのですが
scanfが5回発生する予定が3回しか発生しません。
なぜでしょうか?
ちなみにVC++6.0+windows2000環境です。

不躾で初歩的な質問ですが納得できないのでご教授ください。
よろしくお願いします。



#include <stdio.h>

int main()
{

int i;
char var;

for (i = 0 ; i < 5 ; i++ ){
scanf("%c" , &var);
}

return 0;
}

No.2236

Re:C言語の初歩的質問です
投稿者---TDa(2002/07/30 00:51:08)


scanfは読みとらなかった文字を食い残してきます。
ですので改行コードを読み込んでしまい結果的に
入力1、改行、入力2、改行、入力3、
で5回のループが回ってしまいます。

次のコードでそれがよくわかるんじゃないかと思います。
改行コードは直接は目に見えないのですが文字コード0xaとして表示されるはず。
処理系によって異なるかもしれません。

#include <stdio.h>

int main(void)
{
    int i;
    char var;

    for (i = 0 ; i < 5 ; i++) {
        printf("%d: ", i);
        scanf("%c" , &var);
        printf("格納されたのは%c[%#x]\n", var, var);
    }

    return 0;
}


No.2238

Re:C言語の初歩的質問です
投稿者---どんちゃん(2002/07/30 01:44:08)


なるほど理解できました。
ありがとうございました。(m-_-m)