C++程序无法读取input.txt文件,输出无内容如何解决?
解决C++程序无法读取input.txt并写入output.txt的问题
你的代码存在几个关键问题,导致无法正常读取输入文件和生成输出,以下是具体修复方案:
核心问题与修复步骤
1. 输入输出流对象构造错误
C++中操作文件需要使用专门的文件流类,而非直接用istream/ostream:
- 读取文件必须用
ifstream,正确构造方式为ifstream in("input.txt");,不需要额外的打开模式参数(默认就是只读)。 - 写入文件必须用
ofstream,正确构造方式为ofstream out("output.txt");,默认是覆盖写入模式。
2. 缺少setprecision所需头文件
使用setprecision控制输出精度时,必须包含<iomanip>头文件,否则会出现编译错误或输出异常。
3. 非标准变长数组问题
ll arr[n];是C语言风格的变长数组,不属于C标准(仅部分编译器作为扩展支持),推荐使用C标准的vector<ll>来创建动态数组,兼容性更好。
4. 未检查文件打开状态
如果input.txt不存在、路径错误或权限不足,程序会直接跳过读取逻辑,导致无输出。必须添加文件打开状态检查,及时排查问题。
修正后的完整代码
#include <bits/stdc++.h> #include <iostream> #include <fstream> #include <iomanip> using namespace std; typedef long long int ll; int main() { ifstream in("input.txt"); ofstream out("output.txt"); // 检查文件是否成功打开 if (!in.is_open()) { cerr << "无法打开input.txt文件" << endl; return 1; } if (!out.is_open()) { cerr << "无法打开output.txt文件" << endl; return 1; } int t; in >> t; while (t--) { ll n; in >> n; vector<ll> arr(n); for (int i = 0; i < n; i++) { in >> arr[i]; } sort(arr.begin(), arr.end()); double sum = 0; for (int i = 0; i < n - 1; i++) { sum += arr[i]; } double ans = (sum / (n - 1)) + arr.back(); out << fixed << setprecision(9) << ans << endl; } in.close(); out.close(); return 0; }
额外注意事项
- 文件路径:确保
input.txt与可执行程序在同一目录,或使用绝对路径(如"D:/test/input.txt")。 - VS Code的tasks.json配置:如果通过tasks.json运行程序,避免同时使用代码内文件操作和终端重定向(如
args中的< input.txt),二者选其一即可,否则会导致冲突。
内容的提问来源于stack exchange,提问作者V.G
相关产品推荐
相关产品推荐

