为什么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;