繁体   English   中英

为什么 getline 跳过第一行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM