在以下代码中,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;
}
答案 0 :(得分:8)
cin >> T;
这会消耗你在stdin上提供的整数。
你第一次打电话:
getline(cin, line)
...你在整数后使用换行符。
您可以通过在cin
之后添加以下行来获取cin >> T;
至ignore
换行符:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
需要#include <limits>
答案 1 :(得分:3)
很可能您的输入文件中有换行符,并且正在立即处理,如本页所述:
http://augustcouncil.com/~tgibson/tutorial/iotips.html
您可能需要致电cin.ignore()
让其拒绝一个字符,但是,您可能希望阅读更多提示,因为有关于如何处理数字阅读的建议。
答案 2 :(得分:1)
这一行只读取一个数字:
cin >> T;
如果你想解析用户输入,你需要考虑他们继续点击&lt; enter&gt;因为输入是缓冲的。为了解决这个问题,使用getline读取交互式输入更简单。然后解析该行的内容。
std::string userInput;
std::getline(std::cin, userInput);
std::stringstream(userInput) >> T;