C++ - 我的程序停止运行来自 <cstdio> 的“freopen”函数

C++ - my program stops running `freopen` function from <cstdio>

提问人:Kenny Ynnek 提问时间:12/8/2022 更新时间:12/9/2022 访问量:82

问:

在我的 :main.cpp


#include <cstdio>
#include "hashtable.h"

int main() {
    printf("1hello");
    freopen("2.txt", "w", stdout);
    printf("2hello");
    freopen("1.txt", "r", stdin);
    printf("3hello");
    int type;
    char buffer[1000];int data;
    hashtable table(10000, new naive_hashing(), new linear_probe());
    while (true) {
        scanf("%d", &type);
        if (type == 0) {
            scanf("%s", buffer);scanf("%d", &data);
            table.insert(hash_entry(buffer, data));
        }
        else if (type == 1) {
            scanf("%s", buffer);
            printf("%d\n", table.query(buffer));
        }
        else break;
    }
    return 0;
}

1.txt:

0 dhu_try 3039
0 shirin 3024
0 SiamakDeCode 2647
0 huanghansheng 233
1 dhu
1 dhu_try
1 shirin
1 siamakdecode0
1 huanghansheng
2

output:

1hello

如您所见,程序在进入第一个函数后暂停。我已经检查了文档,但仍然找不到它停止运行的原因。谁能帮我?:p leading_face:freopen

C++ 调试 freopen cstdio

评论

0赞 sweenish 12/8/2022
知道的人可能会出现,但为什么不使用 <fstream>?还是<iostream>就此而言?我根本不相信这是一个C++问题/程序。freopen()
2赞 Ted Lyngmo 12/8/2022
执行程序后,您会看到什么?我希望之后的所有输出都在该文件中。2.txtprintffreopen("2.txt", "w", stdout);
0赞 Sam Varshavchik 12/8/2022
我很好奇:作为学习C++的一部分,你究竟是如何意识到和?上次类似的主题是这里的主题,确定不良知识的来源是一个不称职的C++教师。你们在同一条船上吗?freopenscanf

答:

1赞 Ted Lyngmo 12/8/2022 #1

执行此操作时,您将所有输出重定向到该文件stdout2.txt

freopen("2.txt", "w", stdout);

这就是为什么在那之后控制台上不显示任何输出的原因。查看文件,您很可能会在那里看到输出 - 如果成功的话。始终检查可能失败的函数是否成功。printffreopen2.txtfreopen