[英]cin.ignore() works strangely in c++
我是c ++的新手,此函數給我一些問題。 在執行cin.ignore()時,程序會請求一些輸入,而當我按下Enter鍵時,沒有其他任何反應,程序會停留在該處。 n始終為9,c為少於9個字符的數組。
void LeerCadena(char *c, int n) {
while (1) {
cin.getline(c, n);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
if (cin.fail()) {
cout << "Introduce un dato valido" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
else return;
}
}
好。 我不知道您想如何准確地讀取數據。 但是你編程做這個,
因此程序確實等待短於n個字符的行。 並忽略其后的一行。
如果缺少換行符,它將永遠循環。 該流具有3個標志,表示流已中斷。 Failbit,eofbit和badbit。 cin.good()給出的這些位都不是真的。
所以!cin.good()看起來比cin.fail()更好,但這並不是太容易。 如果是eof,clean()和ignore()會給您另一個eof。 所以可能是這樣。
void LeerCadena(char *c, int n) {
while (1) {
cin.getline(c, n);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
if (cin.fail()) {
cout << "Introduce un dato valido" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
} else if(!cin.good()){
cerr << "LeerCadena failed!" << endl;
return;
}
else return;
}
}
但是您不知道哪個函數會失敗,無論是getline還是忽略。
我真的建議您撥打getline,然后詢問發生了什么。 為什么在getline之后需要忽略?
提示:我也建議您創建輸入文件,並從命令行在程序的標准輸入上重定向文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.