输入被切断

时间:2014-04-10 16:32:28

标签: c++ string input output iostream

这段代码看起来很简单吧?

string password;
cin.ignore();
getline(cin, password);
cout << "The user inputted the password: " << password << endl;

出于某种原因,当我输入“secret”作为密码时,cout只会导致“ecret”,即切断第一个角色每一次。这是为什么?

解决

(见下面的评论)

2 个答案:

答案 0 :(得分:1)

cin.ignore()忽略输入的下一个字符。这意味着s中的secret。我想这个电话是因为先前的getline似乎跳过输入的麻烦(见this question)。这仅适用于使用operator>>并事先留下换行符的情况。我建议改为:

getline(std::cin >> std::ws, password);

这将消除剩余空白的麻烦,并且在没有剩余时不会引起问题。

答案 1 :(得分:0)

你可以这样做..

string password;
cout << "enter password:";
getline(cin, password);
cout << "The user inputted the password: " << password << endl;

Alternatvely ,您可以使用cin接收输入。现在你可以使用cin.ignore。

string password;
cout << "enter password:";
cin >> password;
cin.clear();
cin.ignore(200, '\n');
cout << "The user inputted the password: " << password << endl;

使用cin.clear()接收输入时,最好使用cin.ignore()cin >>。 但是,如果您使用getline(),则似乎没有必要使用cin.ignore()