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

C++读取文件出现垃圾值原因排查 实现输出两文件共有整数功能

现有代码出现垃圾值的原因

  • 固定数组越界:你定义的arr、arr2都是长度为1的静态数组,读取文件时count不断累加,往超出数组长度的内存地址写入和读取数据,属于未定义行为,自然会出现垃圾值,严重时会直接崩溃。
  • 文件流类型错误:你打开file2.txt使用了ofstream(写文件流),如果要读取file2的内容需要使用ifstream,同时声明的text1、text2属于冗余变量,完全没有用到。
  • 逻辑缺失:当前代码只尝试读取第一个文件,既没有读取第二个文件的逻辑,也没有求两个文件数值交集、输出到目标文件的逻辑。

完整功能实现

推荐使用std::unordered_set存储第一个文件的数值,利用其O(1)的查找效率快速判断第二个文件的数值是否为共有值,同时自动去重,不需要手动处理未知长度的数组。
实现代码如下:

#include <iostream>
#include <fstream>
#include <unordered_set>

using namespace std;

int main()
{
    unordered_set<int> num_set;
    int temp;

    // 读取第一个文件的所有整数存入set
    ifstream file1("file1.txt");
    if (!file1.is_open()) {
        cout << "file1.txt打开失败" << endl;
        system("pause");
        return 1;
    }
    while (file1 >> temp) {
        num_set.insert(temp);
    }
    file1.close();

    // 打开第二个文件和输出文件
    ifstream file2("file2.txt");
    ofstream output("output.txt");
    if (!file2.is_open() || !output.is_open()) {
        cout << "文件打开失败" << endl;
        system("pause");
        return 1;
    }

    // 读取第二个文件,匹配共有值写入输出文件
    while (file2 >> temp) {
        if (num_set.count(temp)) {
            output << temp << " ";
            num_set.erase(temp); // 避免重复输出同一个共有值
        }
    }

    file2.close();
    output.close();

    system("pause");
    return 0;
}

代码说明

  • 用unordered_set存储第一个文件的所有整数,自动去重,无需提前声明固定长度的容器,适配未知数量的输入。
  • 读取第二个文件时,每读到一个整数就判断是否在set中,存在则写入output.txt,同时删除set中对应的数值,避免第二个文件出现重复共有值时多次输出,和示例输出格式匹配。
  • 增加了文件打开失败的判断,避免文件不存在时程序无响应。

内容的提问来源于stack exchange,提问作者dipdopkop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:00:00