C言語入力バッファの問題

4427 ワード

今日コードを书くのはしかしやられた七肉八素で、だから记录して、やはりC言语で、今Cでソフトウェアを书いていないべきで、私は今日书く时1つのとても気持ち悪い问题に出会って、とても长い时间を我慢しました.まず、前のサンプルコードにしましょう.
    do

    {    



        if (User_in == 'y' || User_in == 'Y' )

        {

            GetInfo();            //           ,       ,  

            printf("Continue to Get information?(y/n):");

        }

        else

            continue;

        

        //-------           



        scanf("%c",&User_in);

        switch(User_in)

        {

        case 'y':

        case 'Y':break;

        case 'n':

        case 'N':

            printf("
.......Exit.......
"); exit(-1); break; default: printf("You Intput Error!
");break; } }while(1);

上のコードで実行すると、初めてyを入力して確定した後、続いて「Continue to Get information?(y/n):You Intput Error!それは、あなたが確認したときにリターンキーが改行され、次にデータを取得したときに「」がバッファから読み出され、ユーザーが出力せずにContinue to Get information?(y/n)が印刷されるからです.:,また‘’が条件に合わないためYou Intput Errorが印刷されます!,取り除くことができるものが必要です.私はここで葛藤しています.
最初はデータを取得してから次のコードを使えばいいと思っていましたが、実現しなかったので、まず私が書いたのを見てみましょう.
while(User_in == "
") { continue; }

私が理解しているのは、User_inにこの改行文字があるとフィルタリングされますが、残念ながらありません.
次はこの問題を解決してくれたやつを見てみましょう.
fflush関数
原型は:int fflush(FILE*fp)
fflush()関数を呼び出すと、バッファ内の任意の未書き込みデータがfpによって指定された出力ファイルに送信、このプロセスをリフレッシュバッファ(flush a buffer)と呼ぶことができる.
私はここでキーボードバッファをリフレッシュします(個人的にはクリアと理解しています).だからfflush(stdin)を追加します.これで解決します.
・・・まあ、私がこんなにつらいのは、C primer plusをよく見ていないせいだ.私が唯一よく見ていないのは13章後半、最後の章だが、このfflushはちょうど13章後半に出ていて、私を悩ませた.
以上はすべて个人の総括で、间违ったところ、歓迎するところ、菜鸟も参考にすることができることを望んで、大牛の批判の指点・・・・