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

为何输出前数据被清除?C++代码文件无输出问题求助

问题分析与修复方案

核心问题:无限死循环导致程序卡死

你的retrieve函数里存在无限死循环,这是导致没有任何输出的直接原因:

while (i < c.length())
{
    i = 0; // 每次循环都把i重置为0,循环条件永远成立
    // ... 其他代码
}

这个循环会一直执行,程序根本走不到生成v_Temp、返回结果以及后续输出的步骤,自然看不到任何打印或文件写入。

次要问题:文件流未做有效性检查

在recollect函数中创建输出文件流时,没有检查文件是否成功打开:

ofstream out {filename_str.c_str(), std::ios_base::out | std::ios_base::trunc };

如果文件名无效、路径不存在或者没有写入权限,文件流会打开失败,后续的写入操作会静默失败,不会有任何提示。

额外逻辑问题:二进制字符串处理错误

retrieve中生成v_Temp的代码逻辑有误:

v_Temp += (char)(bitset<8>(section_str.substr(0,8%(section_str.length()+1)))).to_ulong();

8%(section_str.length()+1)会导致当section_str长度为7时,取0个字符(8%8=0),无法正确提取8位二进制字符串转换为字符,最终生成的v_Temp可能为空。


修复步骤

  1. 修复无限死循环
    移除循环内的i = 0;,改为根据每次处理的二进制位数递增i。比如你每次处理8+12=20位,那么:

    while (i < c.length())
    {
        // 移除i=0;
        uint16_t B = bitset<8>(c.substr(i,8)).to_ulong(); // 从i位置开始取8位
        space_bin = bitset<8>(B).to_ulong();
        i +=8; // 移动指针
        while (space_bin > 0)
        {
            section_str += bitset<8>(0).to_string();
            space_bin--;
        }
        cout << "??" << flush;
        B = bitset<12>(c.substr(i,12)).to_ulong(); // 从i位置开始取12位
        section_str += bitset<12>(B).to_string();
        i +=12; // 移动指针,总共前进20位
    }
    
  2. 添加文件打开检查
    在创建输出流后,立即检查是否打开成功:

    ofstream out {filename_str.c_str(), std::ios_base::out | std::ios_base::trunc };
    if (!out.is_open()) {
        cerr << "无法打开输出文件: " << filename_str << endl;
        return false;
    }
    
  3. 修正二进制字符串转换逻辑
    替换v_Temp的生成代码,确保每次正确提取8位(或剩余位数)的二进制字符串:

    string v_Temp = "";
    while (section_str.length() > 0)
    {
        size_t take = min((size_t)8, section_str.length());
        bitset<8> bits(section_str.substr(0, take));
        v_Temp += (char)bits.to_ulong();
        section_str = section_str.substr(take);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:18:09