在 C++ 中使用 freopen 打开多个文件

opening multiple files using freopen in c++

我尝试多次使用 freopen() 来读取和关闭不同的文件。 所以这是我在 main 函数中所做的:

if (argc != 5) {
    std::cerr << "Wrong format of arguments given." << endl;
    return -1;
}
std::string command, command2;
freopen(argv[1], "r", stdin);
// do something...
fclose(stdin);
freopen(argv[2], "r", stdin);
freopen(argv[3], "w", stdout);
while (std::cin >> command) {
    std::cin >> command2;
    // run some function...
}
fclose(stdin);
fclose(stdout);

但事实证明,第一部分 // do something... 工作正常(从 std::cin 读取没有问题)但第二部分的 while 循环似乎没有 运行. 输入文件格式正确,所以我不知道为什么 std::cin >> command returns false.

在行 freopen(argv[2], "r", stdin); 中,您正在尝试重新打开 stdin。但是您已经在 fclose(stdin); 行之前关闭了 stdin还有stdin现在是关闭文件后的悬挂指针。

以下摘自 www.cplusplus.com

If a new filename is specified, the function first attempts to close any file already associated with stream (third parameter) and disassociates it. Then, independently of whether that stream was successfuly closed or not, freopen opens the file specified by filename and associates it with the stream just as fopen would do using the specified mode.

您应该在关闭 stdin 后使用 fopen() 功能。