为什么getline跳过第一行?

在下面的代码中, 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; 

这消耗了您在stdin上提供的整数。

你第一次打电话给:

 getline(cin, line) 

你在你的整数之后使用换行符。

您可以通过在cin >> T;之后添加以下行来让cin ignore换行符cin >> T;

 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

(对于std::numeric_limits您需要#include <limits>

input文件中很可能有一个换行符,并且正在立即处理,如本页所述:

http://augustcouncil.com/~tgibson/tutorial/iotips.html

您可能想调用cin.ignore()来拒绝一个字符,但是,您可能想要阅读更多的提示,因为有关于如何处理数字阅读的build议。

这行只读了一个数字:

 cin >> T; 

如果你想parsing用户input,你需要考虑到他们继续按<enter>因为input被缓冲。 为了解决这个问题,使用getline读取交互式input更为简单。 然后parsing该行的内容。

 std::string userInput; std::getline(std::cin, userInput); std::stringstream(userInput) >> T;