C言語入力バッファの問題
4427 ワード
今日コードを书くのはしかしやられた七肉八素で、だから记录して、やはりC言语で、今Cでソフトウェアを书いていないべきで、私は今日书く时1つのとても気持ち悪い问题に出会って、とても长い时间を我慢しました.まず、前のサンプルコードにしましょう.
上のコードで実行すると、初めてyを入力して確定した後、続いて「Continue to Get information?(y/n):You Intput Error!それは、あなたが確認したときにリターンキーが改行され、次にデータを取得したときに「」がバッファから読み出され、ユーザーが出力せずにContinue to Get information?(y/n)が印刷されるからです.:,また‘’が条件に合わないためYou Intput Errorが印刷されます!,取り除くことができるものが必要です.私はここで葛藤しています.
最初はデータを取得してから次のコードを使えばいいと思っていましたが、実現しなかったので、まず私が書いたのを見てみましょう.
私が理解しているのは、User_inにこの改行文字があるとフィルタリングされますが、残念ながらありません.
次はこの問題を解決してくれたやつを見てみましょう.
fflush関数
原型は:int fflush(FILE*fp)
fflush()関数を呼び出すと、バッファ内の任意の未書き込みデータがfpによって指定された出力ファイルに送信、このプロセスをリフレッシュバッファ(flush a buffer)と呼ぶことができる.
私はここでキーボードバッファをリフレッシュします(個人的にはクリアと理解しています).だからfflush(stdin)を追加します.これで解決します.
・・・まあ、私がこんなにつらいのは、C primer plusをよく見ていないせいだ.私が唯一よく見ていないのは13章後半、最後の章だが、このfflushはちょうど13章後半に出ていて、私を悩ませた.
以上はすべて个人の総括で、间违ったところ、歓迎するところ、菜鸟も参考にすることができることを望んで、大牛の批判の指点・・・・
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章後半に出ていて、私を悩ませた.
以上はすべて个人の総括で、间违ったところ、歓迎するところ、菜鸟も参考にすることができることを望んで、大牛の批判の指点・・・・