繁体   English   中英

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

[英]Getting more lines from input in C++

我需要从标准输入中读取行,但是我真的不知道它将有多少行。 我试图用getline()和cin结合while循环来做到这一点,但它导致了无限循环:

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

要么

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

它不会在输入的结尾处停止(行一次出现,因此用户仅按Enter键一次)。

谢谢你的帮助。

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

由于在您输入空白行时,控制台不会放置EOF(文件结尾)。

您应该尝试通过管道将输入从文件传输到程序。 当没有更多输入时,此操作应结束。

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

运行程序的方式不会结束输入,因为控制台始终可以提供更多输入。 您的程序可以正常运行,尽管可能无法达到您期望的方式。 那是因为您误解了自己的欲望。

你所寻找的也许是(但我不能肯定),该方案无论是输入端输入包含一个空行何时结束。 可以将其编码如下:

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;
}

阅读您的评论时,您对“输入结束”有误解。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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