我是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;
}
}
答案 0 :(得分:0)
确定。我不知道你想如何准确地读取数据。但是你的程序会这样做,
因此程序会等待比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之后忽略?
提示:我还建议您从命令行在标准的程序输入上创建输入文件和重定向文件。