freopen("con","r",stdin)用fopen替代
时间: 2023-07-02 21:06:06 浏览: 87
在 C 语言中,`freopen("con","r",stdin)`是将标准输入重定向到控制台窗口。但是该函数在不同的操作系统上可能会有不同的表现,因此并不是一个可移植的函数。
如果要用可移植的方式重定向标准输入,可以使用`fopen`函数打开文件,然后使用`freopen`将标准输入重定向到该文件。例如,可以使用以下代码将标准输入重定向到名为`input.txt`的文件:
```c
#include <stdio.h>
int main() {
FILE *fp = fopen("input.txt", "r");
if (fp == NULL) {
printf("Failed to open input file!\n");
return 1;
}
freopen("input.txt", "r", stdin);
// 现在标准输入已经被重定向到 input.txt 文件
// ...
fclose(fp);
return 0;
}
```
注意,如果要在 Windows 平台上使用控制台窗口作为输入输出设备,可以使用`GetStdHandle`和`SetStdHandle`函数来获取和设置标准输入输出句柄。例如,以下代码将标准输入输出分别重定向到控制台窗口和名为`output.txt`的文件:
```c
#include <windows.h>
#include <stdio.h>
int main() {
HANDLE hConsole = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hFile = CreateFile("output.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hConsole == INVALID_HANDLE_VALUE || hFile == INVALID_HANDLE_VALUE) {
printf("Failed to open console and/or file!\n");
return 1;
}
SetStdHandle(STD_INPUT_HANDLE, hConsole);
SetStdHandle(STD_OUTPUT_HANDLE, hFile);
// 现在标准输入输出已经被重定向到控制台窗口和 output.txt 文件
// ...
CloseHandle(hConsole);
CloseHandle(hFile);
return 0;
}
```
阅读全文