输入 getline 的结尾

use*_*550 5 c++ input getline

可能的重复:
为什么 getchar() 在 Windows 控制台中不将返回识别为 EOF?

我有一个简单的问题......假设我想从标准输入中读取行,只要有东西,但我不知道会有多少行。例如我在做功课,输入是

a
ababa
bb
cc
ba
bb
ca
cb
Run Code Online (Sandbox Code Playgroud)

我不知道到底会有多少行,所以我试过了

string *line = new string[100];
    int counter = 0;
   while(getline(cin,line[counter]))
   {
    counter++;
   }
Run Code Online (Sandbox Code Playgroud)

但它不起作用...感谢您的帮助。

Cod*_*ash 0

您还可以为此使用文件结尾标记。它的用法是这样的。

std::ifstream read ("file.txt") ;

while(!read.eof())
{
  //do all the work
}
Run Code Online (Sandbox Code Playgroud)

如果已到达文件末尾,则此函数返回 true。所以它会一直持续到你遇到它为止。

编辑:

正如评论中提到的,该方法eof可能很危险并且无法提供所需的结果。因此,不能保证它在所有情况下都能运行。您可以在这里查看这种情况何时可能发生。

从文本文件中读取直到 EOF 重复最后一行

  • 这是一个极其危险的建议,通常会导致糟糕的代码。以理智或正确的方式使用“eof()”几乎是不可能的。 (2认同)
  • 什么!这是如何获得三票赞成的?-1 来自我。 (2认同)