有一组txt文件需要读取,数据按照分隔符存放以下各tmpxxx有int类型和float类型
fscanf(fp,"%d%f%f%f%d%d%f",&tmpgaodu,&tmpfengxiang,&tmpsudu1,&tmpsudu2,&tmpweizhi1,&tmpweizhi2,&tmpweizhi3);
fHeight[i*line+k]=tmpgaodu;
fDir[i*line+k]=tmpfengxiang;
fVHoriz[i*line+k]=tmpsudu1;
……
这么读取是没问题,可是碰到不完整的数据就会出错
04680 225.5 027.8 0000.7 100 100 1.7e-014
04800 226.3 028.2 0000.7 100 100 7.9e-015
04920 227.1 028.4 0000.8 100 100 3.5e-015
05040 ///// ///// ////// 000 000 ////////
05160 ///// ///// ////// 000 000 ////////想要把////的值都归为0,把tmpxxx设为CString,再通过atof转换,fscanf语句却出错,错在哪里
fscanf(fp,"%s%s%s%s%s%s%s",tmpgaoduc,tmpfengxiangc,tmpsudu1c,tmpsudu2c,tmpweizhi1c,tmpweizhi2c,tmpweizhi3c);
tmpgaodu=atof(tmpgaoduc);
tmpfengxiang=atof(tmpfengxiangc);
tmpsudu1=atof(tmpsudu1c);

解决方案 »

  1.   

    想要把////的值都归为0,把tmpxxx设为CString,再通过atof转换,fscanf语句却出错,错在哪里
    ======
    出错是肯定的,因为fscanf根本就不认CString的参数啊。
      

  2.   

    建议用CStdioFile来读,用ReadString一次读一行,读到一个CString中去,然后再用空格做分隔符分解出来就方便了。
      

  3.   

    这样会不会很麻烦,一次还得读N个文件?能不能提供下代码呢
    ==============
    N个文件?不用啊,只读一个文件,不过是将一行的字符放到一个CString变量中而已,分解要麻烦一点。
      

  4.   

    可以用CString::Tokenize()来以空格作为分隔符分割,遇到是'\\'开头的就转换成0
      

  5.   

    我是要一次性读取N个文件,每个文件又有N行的,所以用动态数组保存资料fHeight[i*line+k],i为文件数目,k为行数,一行一行读取写不来了
      

  6.   

    fscanf(fp,"%s %s %s %s %s %s %s ",
    加空格
      

  7.   

    其实是一样的,读取一行,在CString中处理比较方便,
    你一次性读N个文件不得一个一个打开吗,只是读取的时候用整行整行的读。
    可以写一个函数来处理。
      

  8.   

    我参照网上的例子把tmpxxxx的类型设为char型的
    fscanf(fp,"%[^ ]%*c%[^ ]%*c%[^ ]%*c%[^ ]%*c%[^ ]%*c%[^ ]%*c%[^\n]",tmpgaoduc,tmpfengxiangc,tmpsudu1c,tmpsudu2c,tmpweizhi1c,tmpweizhi2c,tmpweizhi3c);
    编译通过,运行起来却报内存不能为written的错把tmpxxxx类型设为CString型的
    fscanf(fp,"%s%s%s%s%s%s%s",tmpgaoduc,tmpfengxiangc,tmpsudu1c,tmpsudu2c,tmpweizhi1c,tmpweizhi2c,tmpweizhi3c);
    编译通过,但是读取的数据是不对的有没有朋友能详细的说一下啊
      

  9.   

    文件内容: asdf  ghjkfscanf(fp,"%s",a)和fscanf(fp,"%s  ",a),文件读取的内容一样吗,""双引号里面的空格读取吗?这两种形式文件指针的位置相同吗??读取完后文件指针是  asdf|  ghjk , 还是asdf  |ghjk`