我需要从标准输入读取行,但我真的不知道它会有多少。 我尝试用getline()和cin结合while循环来实现它,但它导致了一个无限循环:
string line;
while( getline(cin, string) ){...}
或
string word;
while( cin >> word ){...}
它在输入结束时没有停止(线路一次到来,因此用户只按一次Enter键)。
感谢您的帮助。
答案 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 。