在C ++中从输入中获取更多行

时间:2014-11-13 10:44:25

标签: c++ input

我需要从标准输入读取行,但我真的不知道它会有多少。 我尝试用getline()和cin结合while循环来实现它,但它导致了一个无限循环:

string line;
while( getline(cin, string) ){...}

string word;
while( cin >> word ){...}

它在输入结束时没有停止(线路一次到来,因此用户只按一次Enter键)。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您的问题是从控制台读取。

当您输入空行时,您的控制台没有放置EOF(文件结尾)。

您应该尝试将输入从文件传输到您的程序。当没有更多输入时,这应该结束。

否则,只检查字符串是否为空,如果为空,则检查是否为循环。

答案 1 :(得分:1)

运行程序的方式,输入不会结束,因为控制台总能提供更多输入。您的程序行为正确,但可能不是您想要的方式。那是因为你误解了自己的欲望。

当输入包含空白 输入结束时,您正在寻找的内容可能(但我无法确定)结束线。这可以编码如下:

int main()
{
    for (std::string line; std::getline(std::cin, line); )
    {
        if (line.empty())
        {
            std::cout << "Got blank line, quitting.\n";
            return 0;
        }

        // process line
    }

    std::cout << "End of input, quitting.\n";
    return 0;
}

答案 2 :(得分:1)

阅读你的评论你会误解“输入结束”。

当你启动程序时,它会等待来自控制台的输入,如果输入可用,它会读取它。最初将一些字符串复制到控制台,以便程序将其作为输入。但是你的程序仍然继续从控制台读取,因为没有“输入结束”。该程序仍然连接到控制台。

您需要向程序发出“输入结束”的信号。在Windows上,按 Ctrl + Z 执行此操作。在Linux上,您需要按 Ctrl + D