1 solutions
-
0
本题我们介绍一下 C 和 C++ 的多种文件读写方式,在 DSA 辅助练习以及 CCSP 的多文件题目中会用上,其中后者可能涉及其他函数。
C 写法
第一种是直接用
fopen
函数打开文件,并使用fscanf
从文件中读取。#include <stdio.h> FILE *in1, *in2; int x, y; int main() { in1 = fopen("1.in", "rb"), in2 = fopen("2.in", "rb"); fscanf(in1, "%d", &x), fscanf(in2, "%d", &y); printf("%d", x - y); }
另一种是使用
freopen
把文件重定向至标准输入,然后scanf
输入即可。#include <stdio.h> int x, y; int main() { freopen("1.in", "r", stdin), scanf("%d", &x); freopen("2.in", "r", stdin), scanf("%d", &y); printf("%d", x - y); }
C++ 写法
直接利用
fstream
库,有fstream
类+传入 flag 以及直接使用ifstream
两种做法。#include <iostream> #include <fstream> int main() { std::fstream in1("1.in", std::ios::in); std::fstream in2("2.in", std::ios::in); int x, y; in1 >> x, in2 >> y; std::cout << x - y; }
#include <iostream> #include <fstream> int main() { std::ifstream in1("1.in"); std::ifstream in2("2.in"); int x, y; in1 >> x, in2 >> y; std::cout << x - y; }
或者利用
rdbuf
函数把缓冲区绑定,等同于文件重定向。需要注意的是,如果关闭了输入输出流同步,涉及到多次重定向时,不要使用
freopen
,请使用fstream
系列函数。#include <iostream> #include <fstream> int main() { std::ios::sync_with_stdio(0); std::cin.tie(0), std::cout.tie(0); std::ifstream in1("1.in"); std::ifstream in2("2.in"); int x, y; std::cin.rdbuf(in1.rdbuf()), std::cin >> x; std::cin.rdbuf(in2.rdbuf()), std::cin >> y; std::cout << x - y; }
- 1
Information
- ID
- 95
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 1
- Tags
- # Submissions
- 9
- Accepted
- 2
- Uploaded By