C++ 为什么这个while循环永远不会结束?

C++ 为什么这个while循环永远不会结束?,c++,C++,因此,我觉得我即将解决一个编程任务,它将每行中使用最多的单词打印在一行上。例如: I am a man, am right? I don't know if i like that. It's okay to not feel okay. 将打印:“我还好吗”(作业中忽略标点符号和大小写) 这就是我到目前为止所做的,但问题是扫描行的while循环永远不会终止,因此永远不会在外部for循环中打印输出。有人看到我哪里出错了吗 string line; vector<string> re

因此,我觉得我即将解决一个编程任务,它将每行中使用最多的单词打印在一行上。例如:

I am a man, am right?
I don't know if i like that.
It's okay to not feel okay.
将打印:“我还好吗”(作业中忽略标点符号和大小写)

这就是我到目前为止所做的,但问题是扫描行的while循环永远不会终止,因此永远不会在外部for循环中打印输出。有人看到我哪里出错了吗

string line;
vector<string> result;
while(getline(cin,line)){     //on each line

}
字符串行;
矢量结果;
而(getline(cin,line)){//
}

当前,您的程序正在等待表示输入已结束的EOF字符。如果正在运行此操作并从命令行输入输入,则可以通过在*nix上按Ctrl+D或在windows上按Ctrl+Z手动插入EOF。这将导致程序中断getline循环

如果您不想这样做,您需要一种方法来打破getline循环,否则它将继续在该循环中运行

一个好主意可能是检测空行,因此按两次enter键结束循环:

while(getline(cin,line)){     //on each line
    if(line == "")
        break;
    ...
}

当前,您的程序正在等待一个EOF字符,该字符表示输入已结束。如果正在运行此操作并从命令行输入输入,则可以通过在*nix上按Ctrl+D或在windows上按Ctrl+Z手动插入EOF。这将导致程序中断getline循环

如果您不想这样做,您需要一种方法来打破getline循环,否则它将继续在该循环中运行

一个好主意可能是检测空行,因此按两次enter键结束循环:

while(getline(cin,line)){     //on each line
    if(line == "")
        break;
    ...
}

你的循环是正确的;你只是不知道如何表示输入的结束。你坐在那里等待程序的进展,但程序却坐在那里等待你给它更多的输入

按Ctrl+D(Linux)或Ctrl+Z(Windows)发送EOF字符/信号/药剂以结束循环

这样,所有常见的shell技术(如文件重定向和管道)都可以正常工作


引入人工手段,如双换行或一些神奇的命令,是非常传统的,这会使您的程序更难自动化。(让你的程序神奇地知道其中一条新行来自键盘点击,而不是复制/粘贴,这是不可能的。你也不希望如此!这打破了大量有价值的抽象。)在编写命令行工具时,尽可能坚持标准实践。

你的循环是正确的;你只是不知道如何表示输入的结束。你坐在那里等待程序的进展,但程序却坐在那里等待你给它更多的输入

按Ctrl+D(Linux)或Ctrl+Z(Windows)发送EOF字符/信号/药剂以结束循环

这样,所有常见的shell技术(如文件重定向和管道)都可以正常工作


引入人工手段,如双换行或一些神奇的命令,是非常传统的,这会使您的程序更难自动化。(让你的程序神奇地知道其中一条新行来自键盘点击,而不是复制/粘贴,这是不可能的。你也不希望如此!这打破了大量有价值的抽象。)在编写命令行工具时,请尽可能坚持标准做法。

有什么方法可以做到这一点,所以我只需输入,按enter键一次就可以得到结果?我假设您是从命令行(到stdin)输入的,所以每一行都以按enter键结束?如果是这样的话,你需要决定一些方法来区分新行,这意味着你的行已完成,你将键入新行,以及新行意味着你已完成。输入整个段落,然后我按enter键。我需要一种方法,以便只按一次enter键。我感觉我是如此接近!不,团队。正如我已经说过好几次的那样,你试图让你的程序神奇地猜测,当你在输入之后在键盘上点击“回车”时,你在键盘上点击了它,并且当没有更多的输入时,你这样做了。这在根本上和逻辑上都是不可能的。现在有几种方法可以让你试着用锤子把一个方形的钉子敲入一个圆孔。@Team.Coco:听起来像是老师在解决问题!对于类,一个表示终止的空行可能是可以的。我当然会建议你记住这个对话,并在将来工作时使用适当的EOF:)有没有办法做到这一点,所以我只需输入,按一下enter键,然后得到结果?我假设你是从命令行(到stdin)输入的,所以每行都以按enter键结束?如果是这样的话,你需要决定一些方法来区分新行,这意味着你的行已完成,你将键入新行,以及新行意味着你已完成。输入整个段落,然后我按enter键。我需要一种方法,以便只按一次enter键。我感觉我是如此接近!不,团队。正如我已经说过好几次的那样,你试图让你的程序神奇地猜测,当你在输入之后在键盘上点击“回车”时,你在键盘上点击了它,并且当没有更多的输入时,你这样做了。这在根本上和逻辑上都是不可能的。现在有几种方法可以让你试着用锤子把一个方形的钉子敲入一个圆孔。@Team.Coco:听起来像是老师在解决问题!对于类,一个表示终止的空行可能是可以的。我当然会建议你记住这段对话,并在将来工作时使用适当的EOF:)你真的需要所有这些代码来重现这个问题吗?你真的需要所有这些代码来重现这个问题吗?有没有办法把这个编码进去,这样我就不需要这么做?立即输入段落,然后按enter键并打印结果。@Team.Coco:程序没有办法(和sh