首页 > 解决方案 > 比较C中两个数据文件的int值

问题描述

我得到 3 个整数文件,代表不同日子的三种不同温度读数。我需要每天比较这三个整数,以找出如果其中一个与其他两个不匹配是否存在错误读数。我不断收到一条错误消息

invalid operands to binary expression ('FILE'
      (aka 'struct __sFILE') and 'FILE'
 if(*(data1+i)==*(data2+i) && data3[i]!=data1[i])

我的代码是

int main(int argc, char** argv){
  FILE *data1, *data2, *data3;

  data1=fopen(argv[2], "r");
  data2=fopen(argv[3], "r");
  data3=fopen(argv[4], "r");

  int c1=0; int c2=0; int c3=0; int unkown=0;

  for(int i=0; i<argc; i++){
    if(*(data1+i)==*(data2+i) && data3[i]!=data1[i])
      c3++;
    if(data1[i]==data3[i] && data2[i]!=data1[i])
      c2++;
    if(data3[i]==data2[i] && data1[i]!=data2[i])
      c1++;
    if(data1[i]!=data2[i] && data1[i]!=data3[i] && data3[i]!=data2[i])
      unkown++;
  }
  printf("Data1 has %d possible bad values\nData2 has %d possible bad values\nData3 has %d possible bad values\nThere are %d unkown cases\n", c1, c2, c3, unkown);
  return 0;
}

标签: cfilecsv

解决方案


实际上,就像 Eugene 建议的那样,您首先需要将所有文件读取到字符数组中,然后从中读取。我为一个我愿意分享的任务写了一段代码:

void readFile(const char *fileName, char **text, int *filelen)
{
    FILE *f;

    f = fopen(fileName, "rb");
    fseek(f, 0, SEEK_END);
    *filelen = ftell (f);

    fseek(f, 0, SEEK_SET);
    *text = malloc((*filelen + 1) * sizeof(char));
    if(*text)
    {
        fread(*text, 1, *filelen, f);
    }
    fclose(f);
    (*text)[*filelen] = '\0';
}

然后,您可以初始化所有变量并像这样进行函数调用(例如):

char *fileText;
int filelen;

readFile("filename.txt", &fileText, &filelen);

只是,当您处理多个文件并将“filename.txt”更改为正确的文件名时,您应该创建几个fileTextfilelen变量。

如果您只需要一次数据并希望在此之后丢弃它,则无需先保存到字符数组。您可以直接使用 fgetc 或 fscanf 来分析您的数据。


推荐阅读