我尝试多次使用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。
// do something...
std::cin
std::cin >> command
直列式 freopen(argv[2], "r", stdin); 您正在尝试重新打开 stdin 标准DIN 直列式 fclose(stdin); 就在那之前。 而且 , 标准DIN 正在关闭后悬空指针 文件 .
freopen(argv[2], "r", stdin);
stdin
标准DIN
fclose(stdin);
以下是摘录自 www.cplusplus.com :
如果指定了新的文件名,函数将首先尝试关闭已与流关联的任何文件(第三个参数)并解除其关联。然后,与流是否成功关闭无关,freopen打开filename指定的文件并将其与流关联,就像fopen使用指定模式所做的那样。
您应该使用 fopen() 关闭后的功能 标准DIN .
fopen()