[英]Why getline skips first line?
在以下代码中, getline()
跳过读取第一行。 我注意到在注释“ cin >> T
”行时,它正常工作。 但我想不出原因。
我想在读行之前读一个整数! 如何解决?
#include <iostream>
using namespace std;
int main () {
int T, i = 1;
string line;
cin >> T;
while (i <= T) {
getline(cin, line);
cout << i << ": " << line << endl;
i++;
}
return 0;
}
cin >> T;
这会消耗您在标准输入上提供的整数。
第一次调用:
getline(cin, line)
...您在整数后使用换行符。
您可以通过在cin >> T;
之后添加以下行来让cin
ignore
换行符cin >> T;
:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
(对于std::numeric_limits
您需要#include <limits>
)
您的输入文件中很可能有换行符,并且正在立即处理,如本页所述:
http://augustcouncil.com/~tgibson/tutorial/iotips.html
您可能想要调用cin.ignore()
让它拒绝一个字符,但是,您可能想要阅读更多提示,因为有关于如何处理数字读取的建议。
这一行只读取一个数字:
cin >> T;
如果你想解析用户输入,你需要考虑到他们不断点击 <enter> 因为输入被缓冲。 为了解决这个问题,有时使用 getline 读取交互式输入更简单。 然后解析该行的内容。
std::string userInput;
std::getline(std::cin, userInput);
std::stringstream(userInput) >> T;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.