C ++这个while循环有什么问题

时间:2012-08-14 14:22:49

标签: c++

我正在尝试输入一个字符串。当我输入类似John的内容时,它工作正常。

但是,如果我输入类似John Smite的内容,我最终会陷入无限循环,终端崩溃。

string fullname;

do{
    cout << "Please input the Full Name of the user: ";
    cin >> fullname;
}while(fullname=="");

3 个答案:

答案 0 :(得分:1)

空间正在甩掉。你应该使用getline。

答案 1 :(得分:1)

你可以尝试这个:

do{
cout << "Please input the Full Name of the user: ";
cin >> fullname;
}
while(fullname.length() == 0);

答案 2 :(得分:0)

至于为什么你得到一个无限循环 - operator>>的{​​{1}}重载将首先丢弃任何前导空格,然后读取下一个空格或可用输入的结尾。

当您输入“John Smite”时,第一次迭代读取“John”,第二次迭代读取“Smite”,然后没有更多输入用于后续迭代。问题是您的实现似乎在尝试读取之前清除std::string。但是因为流不再处于良好状态,所以不再有可能读取,并且存在无限循环。

你可以这样做:

fullname

这有一个(好的)副作用,它会折叠多个相邻的空白字符,但它仍然非常笨重。

更好的方法就是说

string temp;
string fullname;
do {
    cin.clear(); // clear any error flags
    do {
        if (cin >> temp) fullname += temp + ' ';
    } while (cin.good());
} while (fullname.empty());