我正在尝试读入用户输入的字符,直到按下 Ctrl+ D。执行我的代码时,循环似乎在“请输入字符串并按 Ctrl +D 退出”和“Exciting Function”的输出之间无限交替运行。有什么方法可以更好地处理此输入的错误?
我尝试将 while 条件更改为 getLine(cin,input),但无济于事。不过,我正在考虑使用输入流。
//get the user input. return true if all the strings are made of only alphanumeric characters
bool getUserStrings(vector<string>& usrVec)
{
string input;
vector<string>::iterator lp;
string::iterator lp2;
cout << "Please enter strings and press Ctrl D to quit" << endl;
while (cin >> input)
{
usrVec.push_back(input);
}
for (lp = usrVec.begin(); lp != usrVec.end(); lp++)
{
for (lp2 = lp->begin(); lp2 != lp->end(); ++lp2)
{
if (*lp2 < 'A' || *lp2 > 'Z' || *lp2 < 'a' || *lp2 > 'z'
|| *lp2 < '0' || *lp2 > '9')
{
cout << "Exciting function" << endl;
return false;
}
}
}
cout << "Happy Function" << endl;
return true;
}
int main()
{
vector<string> userStrings;
while (!getUserStrings(userStrings))
}
最佳答案
您的问题是,即使输入为空,您也会返回 true。您可以通过多种方式解决此问题,但我的方式是刷新标准输入。
if (cin.eof()) {
cin.clear();
cin.ignore(input.size());
}
我会把它放在你的外层 for()
循环之后。
关于c++ - 为什么输入流不识别 Ctrl D 而给出一个无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55582234/