为什么txt文件的结果不如预期?

时间:2015-03-30 10:10:44

标签: c file printf

以下程序无法正常运作。它应该读取具有特定格式的文件并写入具有相同值的文件。

已加载

sample.txt,输出为sample_color.txt,请参阅下面的链接。

因此,文件的内容不相同。

让我知道如何解决它。

输入文件:sample.txt https://www.dropbox.com/s/jogg7rxp9fk7nyi/sample.txt?dl=0

输出文件:sample_color.txt https://www.dropbox.com/s/1v1bw7tntmwlkny/sample_color.txt?dl=0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <iostream>
using namespace std;

int main(int argc,char *argv[])
{

/*****************************************************
        1.Definition of Variables
    ******************************************************/
    FILE *fpr,*fpw;  //file pointer for input&output file

    int color;//
    //int dn1,dn2,dn3,dn4,dn5;
    unsigned char r,g,b;
    float x,y,z;

    if(argc!=3)
    {
        fprintf(stderr,"Usage: %s (1)input_org.txt\n(2)write_xyz FILENAME\n",argv[0]);
        exit(1);
    }

    printf("OPEN FILE NAME:%s\n",argv[1]);


    if((fpr=fopen(argv[1],"r"))==NULL)
      {
        printf("error\n");
        exit(1);
      }


    if((fpw=fopen(argv[2],"w"))==NULL)
      {
        fprintf(stderr,"DSM by GSI.raw\n");
        exit(1);
       }

    while(fscanf(fpr,"%f %f %f %d %d %d",&x,&y,&z,&r,&g,&b)!= EOF)
      {
        cout << x << endl;
        //color=1000000*(int)r+1000*(int)g+(int)b;
        //fprintf(fpw,"%f %f %f %d\n",x,y,z,color);
        fprintf(fpw,"%f %f %f %d %d %d\n",x,y,z,r,g,b);
       }

    fclose(fpr);
    fclose(fpw);
}

1 个答案:

答案 0 :(得分:1)

r, g, b的类型与格式说明符不匹配。

由于char小于int,输入将覆盖变量,这就是x具有错误值的原因。

您应该将类​​型更改为int以使其按您的意愿运行:

int r, g, b;

如果您想知道float值的奇怪舍入错误,请阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic