MGE*_*MGE 47 c++ string getline
我使用getline方法获取用户输入的消息时遇到问题,我使用的方法如下:
string messageVar;
cout << "Type your message: ";
getline(cin, messageVar);
Run Code Online (Sandbox Code Playgroud)
然而,它并没有停止获得输出值,这有什么问题?
Nat*_*pel 88
如果您正在使用getline()after cin >> something,则需要在两者之间从缓冲区中清除换行符.你可以通过使用来做到这一点cin.ignore().
它会是这样的:
string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为>>操作符\n在输入缓冲区中留下了换行符.当您执行未格式化的输入时,这可能会成为问题,例如getline(),在找到换行符之前读取输入.发生这种情况,它将立即停止阅读,因为\n在您之前的操作中,它仍然悬挂在那里.
如果您在输入中只有一个换行符,那就行了
std::cin.ignore();
Run Code Online (Sandbox Code Playgroud)
会很好的.它从输入中读取并丢弃下一个字符.
但是如果输入中还有其他内容,除了换行符(例如,你读了一个单词,但用户输入了两个单词),那么你必须要做
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)
参见例如该ignore功能的参考.
为了更安全,在循环中执行上面的第二个替代,直到gcount返回零.
| 归档时间: |
|
| 查看次数: |
223187 次 |
| 最近记录: |