1

我正在尝试多次使用 freopen() 来读取和关闭不同的文件。所以这就是我在我的主要功能中所做的:

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返回 false。

4

1 回答 1

1

在线freopen(argv[2], "r", stdin);您正在尝试重新打开stdin. 但在那之前你已经stdin排队了。另外,现在是关闭文件后的悬空指针。fclose(stdin);stdin

以下是www.cplusplus.com的摘录:

如果指定了新文件名,该函数首先尝试关闭任何已与流(第三个参数)关联的文件并解除关联。然后,与该流是否成功关闭无关,freopen 打开由文件名指定的文件并将其与流相关联,就像 fopen 使用指定模式所做的那样。

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

于 2017-12-20T08:32:23.180 回答