int main(){
char str0[30] = "\0";
while(true){
cin.get(str0, 30);
cin.ignore(128, '\n');
cout << "success" << str0 << endl;
}
return 0;
}
這是出問題的代碼:
當只鍵入回車時,就會死回圈,即無限輸出“success”,自己沒有輸入的機會。
cin.ignore()應該已經把快取區清空了,為什么cin.get()還會去讀取?

如果用cin>>,根本不認回車,只有輸入東西時才會運行到cout那一行。
求大佬科普一下
uj5u.com熱心網友回復:
金無足赤,碼無全能。我等仔細地摸索總結記憶它的優缺點,
擇其善者而用之,其不善者而避之。
如此而已。
uj5u.com熱心網友回復:
這樣改下,可實作樓主的要求,但想輸入Ctrl+Z結束輸入時,始終退不出輸入狀態:#include <iostream.h>
int main(){
char str0[30] = "\0";
while(true){
cin.get(str0, 30);//函式會將換行符、回車符等保留在輸入佇列,同時會將cin的狀態置為錯誤
cin.clear(); //將cin的狀態清0
cin.sync();//讓流與其對應的資料源同步
//cin.ignore(128, '\n');
cout << "success" << str0 << endl;
}
return 0;
}
建議改這樣:
int main(){
char str0[30] = "\0";
while (cin>>str0) { //Ctrl+Z,結束輸入
cout << "success" << str0 << endl;
}
return 0;
}
//cin>>str0;回車符不讀入到緩沖區
//cin.get();回車符讀入到緩沖區cin cin.get() cin.clear()一些詳細用法,可以csdn或網上搜索下。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/272070.html
標籤:新手樂園
上一篇:函式傳參是通過暫存器還是堆疊?
下一篇:求助
