C言語関係掲示板

過去ログ

No621 入力ストリームのフラッシュ方法 

[戻る] [ホームページ]
No.6193

入力ストリームのフラッシュ方法
投稿者---みやび(2003/05/09 20:37:59)


タイトルの通りの質問なのですが
scanfでは不味いので代わりに
例えばfgets & sscanfを使いますよね?

その際用意したサイズ以上に入力すると
ストリームに残ってしまい入力が複数ならんでいたりすると
誤動作しますよね。

なのでフラッシュしたいのですが、
fflashは入力では未定義ですので使用をできれば
さけたく、とりあえず用意するサイズをかなり大きめに
とってとりあえず誤動作を避ける。といった形で
今は使っているのですが何かきちんとフラッシュ
するにはどうすべきなのでしょうか?


No.6194

Re:入力ストリームのフラッシュ方法
投稿者---かずま(2003/05/09 23:31:13)


ストリームに入力が残っているのを検出し、それを読み飛ばせばいいんですよね。
    while (fgets(buf, sizeof buf, stdin)) {
        if (buf[strlen(buf)-1] != '\n')      /* 行末まで読んでいない */
            while ((c = getchar()) != EOF && c != '\n')
                ;                            /* 行末まで読み飛ばす */
        sscanf(buf, "....", ....);
		....
    }


No.6195

Re:入力ストリームのフラッシュ方法
投稿者---かずま(2003/05/09 23:48:52)


こんな書き方もできます。
    while (fgets(buf, sizeof buf, stdin)) {
        if (strchr(buf, '\n') == NULL)       /* 行末まで読んでいない */
            while ((c = getchar()) != EOF && c != '\n')
                ;                            /* 行末まで読み飛ばす */
        sscanf(buf, "....", ....);
        ....
    }


No.6200

Re:入力ストリームのフラッシュ方法
投稿者---みやび(2003/05/10 02:53:54)


消すことや、入力しないようにすること
ばかり考えていましたが、
空ループで読み飛ばせば良かったですね・・・
疑問が解決しました。ありがとうございました。