c - 比较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;
}
解决方案
实际上,就像 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”更改为正确的文件名时,您应该创建几个fileText和filelen变量。
如果您只需要一次数据并希望在此之后丢弃它,则无需先保存到字符数组。您可以直接使用 fgetc 或 fscanf 来分析您的数据。
推荐阅读
- html - 背景图像叠加
- android - 密钥库文件未设置用于签署配置发布颤动
- python - 创建时间分组列表
- modelica - 考虑动态动量平衡时 Modelica.Fluid.Pipes.DynamicPipe 中的压降
- excel - 如何在 Excel 中找到每个会话的当天最高值?
- c# - 最佳实践全局结果 - Asp.Net core 3 和 Angular 9 中的错误处理
- javascript - 反应鼓机
- flutter - 如何在 Firestore 中为子集合设置流?
- python - 创建一个有向图,其中进(出)度分布是无标度的
- pandas - Pandas - 使用分位数在图表上获取值