这段代码看起来很简单吧?
string password;
cin.ignore();
getline(cin, password);
cout << "The user inputted the password: " << password << endl;
出于某种原因,当我输入“secret”作为密码时,cout只会导致“ecret”,即切断第一个角色每一次。这是为什么?
(见下面的评论)
答案 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()
。