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

C++读取文件时判断换行符的if语句失效、3D数组i索引不更新如何解决

问题根源

  • 第一,>>流提取运算符默认会跳过所有空白字符(包含换行符\n、空格、制表符等),你永远读不到换行符到temp变量里,所以if (temp == '\n')判断永远不会触发,i自然不会更新。
  • 第二,代码逻辑顺序错误:你先判断旧的temp值,再读取新的temp,还没做任何判断就直接把新读的temp存入数组,第一次循环时temp还是未初始化的野值,逻辑完全错位。
  • 第三,while(fin.eof() != 1)作为循环条件是错误用法,eof()标记只有在读完最后一个有效字符之后再次尝试读取才会触发,会导致循环多执行一次,存入无效值。

解决方案

步骤1:替换读取方式

把fin >> temp换成fin.get(temp),这个方法会逐个读取所有字符,不会跳过换行、空格等空白字符,才能正常识别换行符。

步骤2:调整逻辑顺序

先读取字符,再做分隔符判断,非分隔符的有效字符再存入数组。

修正后参考代码

// 初始化i,j,k的初始值为0,提前读第一个字符
char temp;
int i = 0, j = 0, k = 0;
fin.get(temp);
while(!fin.eof())
{
    if(temp == '\n') 
    {
        k = 0;
        j = 0;
        i++;
        cout << "call from 2nd if";     
    }
    else if(temp == ',')
    {
        k = 0;
        j++;
        cout << "call from 1st if";
    }
    else
    {
        // 非分隔符才存入数组
        data[i][j][k] = temp;
        cout << "address " << i << j << k << " : " << data[i][j][k] << endl;
        k++;
    }
    // 读下一个字符
    fin.get(temp);
}

额外注意

如果你的数据里的数字是多位数,不是单个字符存储,那你需要调整读取逻辑,改用按行读取getline拆分每行内容,再按逗号拆分字段,再转成对应数值类型,避免单个字符读取把多位数拆成单个字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:54:01