为什么getline会跳过第一线?

时间:2011-05-07 00:58:52

标签: c++

在以下代码中,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;
}

3 个答案:

答案 0 :(得分:8)

cin >> T;

这会消耗你在stdin上提供的整数。

你第一次打电话:

getline(cin, line)

...你在整数后使用换行符。

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

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

std::numeric_limits

需要#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;