c++中freopen的使用方法
·
freopen 是 C/C++ 标准库中的一个函数,它可以用来重定向标准输入输出流。这个函数的声明在 <stdio.h> 头文件中,其功能是将一个已经打开的文件流重新定向到另一个文件。这对于将程序的输入和输出从控制台重定向到文件中非常有用。
函数原型
FILE *freopen(const char *path, const char *mode, FILE *stream);
参数说明
path:新的文件路径,即你想要重定向到的文件名。mode:文件打开的模式,与fopen函数中的模式相同,例如"r"表示只读,"w"表示写入(会清空文件内容),"a"表示追加,"r+"表示读写等。stream:指向FILE结构的指针,通常使用标准流文件,如stdin、stdout和stderr。
返回值
- 成功时,返回指向新打开文件的
FILE指针。 - 失败时,返回
NULL。
功能
freopen 函数首先尝试关闭与 stream 关联的文件,然后尝试以 mode 指定的模式打开 path 指定的文件,并将该文件与 stream 关联。如果 path 是空指针,则函数尝试重新打开已与 stream 关联的文件。
示例代码
以下是一个使用 freopen 函数将标准输入和输出重定向到文件的示例:
#include <stdio.h>
int main() {
int a, b;
// 将标准输入流重定向到 "in.txt" 文件
freopen("in.txt", "r", stdin);
// 将标准输出流重定向到 "out.txt" 文件
freopen("out.txt", "w", stdout);
// 从文件读取数据并输出到另一个文件
while (scanf("%d %d", &a, &b) != EOF) {
printf("%d\n", a + b);
}
// 关闭文件
fclose(stdin);
fclose(stdout);
return 0;
}
在这个示例中,freopen 函数被用来将标准输入流 stdin 重定向到 “in.txt” 文件,将标准输出流 stdout 重定向到 “out.txt” 文件。这样,程序的输入将从 “in.txt” 文件中读取,输出将保存到 “out.txt” 文件中。
注意事项
- 在使用
freopen重定向后,如果还需要使用标准输入输出,不能直接fclose,因为这样会导致后续的输入输出操作失效。如果需要恢复标准输入输出,可以再次使用freopen将它们重定向回控制台(在 Windows 下为 “CON”,在 Linux 下为 “/dev/console”)。 - 如果在程序中输出了中文字符,重定向可能会出现乱码问题,目前没有很好的解决方法,可以使用英文代替中文进行输出。
更多推荐
所有评论(0)