C++ 如何确定I';您是否已使用非编码文件到达EOF?

C++ 如何确定I';您是否已使用非编码文件到达EOF?,c++,C++,我在EOF中查找了几个实例,但在所有实例中,EOF都用于程序的一部分文件,例如: std::fstream myFile("file.txt", std::ios::in); while(!myFile.eof()) { /*program*/ } 但是在本例中,我没有将文件用作代码的一部分。我只是使用基本的cin命令。有一个退出命令,但假设用户运行程序时如下所示: ./program <myFile.txt> myOutput 这很好,但是他们忘了在末尾添加quit命令

我在EOF中查找了几个实例,但在所有实例中,EOF都用于程序的一部分文件,例如:

std::fstream myFile("file.txt", std::ios::in);
while(!myFile.eof()) {
    /*program*/
}
但是在本例中,我没有将文件用作代码的一部分。我只是使用基本的cin命令。有一个退出命令,但假设用户运行程序时如下所示:

./program <myFile.txt> myOutput
这很好,但是他们忘了在末尾添加quit命令,所以代码不会停止。那么,如何让代码在这种情况下检测EOF并停止?

文件结束(EOF)意味着不再需要从文件缓冲区读取任何内容,而不是明确地放在文件本身。。你仍然应该用你的代码很好地到达那里


另一种方法是读取缓冲区,直到不再有字节可读取为止

检测文件结尾的正确方法是检查每个输入操作是否成功

例如,使用
getline
可以

std::string line;
while (std::getline(std::cin, line)) {
    // do stuff with line
}
或使用
>

while (std::cin >> x) {
    // do stuff with x
}

这适用于所有输入流,无论它们是来自文件(
fstream
)还是例如
cin

,如果它们没有添加quit命令,但您到达文件末尾,则可能是停止的好时机。如果他们没有添加受支持的命令,并且您读取的行中有一些不受支持的内容,这可能也是一个停止的好时机(或者您可以继续读取以找到另一个有效命令,最终您将以EOF结束),那么您的循环无论如何都会中断:
cin
是一个“文件”(输入流)。如果cin可以工作,那么我该如何将其与EOF进行比较呢?我不认为while(cin!=EOF)会起作用,是吗?你的代码应该还是很好的,也许读到了,我遵循了你用cin做的代码,它似乎起了作用,但我有一个分段错误。myOutput中的输出是准确的,但是为什么代码会给我一个分段错误?@Damerian,因为您犯了一个错误,并且您的代码访问了无效内存?我不能说得更具体,因为我不能调试我看不见的代码。@Damerian从不认为您的代码中只有一个错误。通常,诸如的工具可以帮助提高编译器发出的警告级别并解析生成的消息。在g++和具有类似命令结构的编译器下,我使用
-pedantic-Wall-Wextra-Werror
,在VisualStudio下,我通常指定/W4。如果这些都没有帮助,通常您的开发环境会附带一个调试实用程序,允许您在程序运行时仔细检查程序。您是对的,SEGFULT最终是完全无关的,我很抱歉。
while (std::cin >> x) {
    // do stuff with x
}