You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:05:40