I have a code that reads two .txt files and puts them into structs. Then, I want to compare the x value from each file and find matches. The type of these values is floats. I keep getting incorrect matches and line numbers and I'm not sure what to do. It works for the first few but then it just says there's a match when it is only a value in one file. Everything else works fine, so if anyone has suggestions on comparing the values that would be much appreciated. Thank you.
#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #define FLT_EPSILON 1.19209290E-07F typedef struct fcat_s { float x; float y; float a_j2000; float b_j2000; float mag; } fcat_s; typedef struct cat_s { float num; float x; float y; float xworld; float yworld; float flux_auto; float mag_auto; float awin; float bwin; } cat_s; int main(void) { float exptime = 0; float F = 0; float Mi = 0; float Mcat = 0; float FLUX_AUTO = 0; float ZP = 0; char fcatname[50]; char catname[50]; int fcatcount = 0; int catcount = 0; char fcat_c; char cat_c; float x; char str[100]; int i = 0; int j = 0; float temp; int match = 0; printf("Please input the .fcat file name:\n"); scanf("%str", fcatname); printf("Please input the .cat file name:\n"); scanf("%str", catname); printf("Please input the exposure time:\n"); scanf("%f", &exptime); fcat_s *f = (fcat_s *)malloc(sizeof(fcat_s)); cat_s *c = (cat_s *)malloc(sizeof(cat_s)); // .fcat file FILE *fcat; fcat = fopen(fcatname, "r"); if (fcat == NULL) { printf("The input file does not exist\n"); } else { for (fcat_c = getc(fcat); fcat_c != EOF; fcat_c = getc(fcat)) { if (fcat_c == '\n') fcatcount++; if (fcatcount > 4) { fscanf(fcat, "%f", &f[fcatcount-5].x); fscanf(fcat, "%f", &f[fcatcount-5].y); fscanf(fcat, "%f", &f[fcatcount-5].a_j2000); fscanf(fcat, "%f", &f[fcatcount-5].b_j2000); fscanf(fcat, "%f", &f[fcatcount-5].mag); } } } printf("\n"); printf("The .fcat file has %d lines. \n", fcatcount); printf("\n"); printf("\n"); printf("FCAT CONTENTS\n"); for (i = 0; i < (fcatcount-5); i++) { printf("%lf\t %lf\t %lf\t %lf\t %lf\n", f[i].x, f[i].y, f[i].a_j2000, f[i].b_j2000, f[i].mag); } printf("\n"); printf("\n"); // .cat file FILE *cat; cat = fopen(catname, "r"); if (cat == NULL) { printf("The input file does not exist\n"); } else { for (cat_c = getc(cat); cat_c != EOF; cat_c = getc(cat)) { if (cat_c == '\n') catcount++; if (catcount > 8) { fscanf(cat, "%f", &c[catcount-9].num); fscanf(cat, "%f", &c[catcount-9].x); fscanf(cat, "%f", &c[catcount-9].y); fscanf(cat, "%f", &c[catcount-9].xworld); fscanf(cat, "%f", &c[catcount-9].yworld); fscanf(cat, "%f", &c[catcount-9].flux_auto); fscanf(cat, "%f", &c[catcount-9].mag_auto); fscanf(cat, "%f", &c[catcount-9].awin); fscanf(cat, "%f", &c[catcount-9].bwin); } } } printf("\n"); printf("The .cat file has %d lines. \n", catcount); printf("\n"); printf("\n"); printf("CAT CONTENTS\n"); for (i = 0; (i < catcount-9); i++) { printf("%lf\t %lf\t %lf\t %lf\t %lf\t %lf\t %lf\t %lf\t %lf\n", c[i].num, c[i].x, c[i].y, c[i].xworld, c[i].yworld, c[i].flux_auto, c[i].mag_auto, c[i].awin, c[i].bwin); } printf("\n"); printf("\n"); // searching in the files for a match for (i = 0; (i <= (fcatcount-5)); i++){ for (j = 0; (j <= (catcount-9)); j++) { if (fabs(f[i].x - c[j].x) < FLT_EPSILON && fabs(f[i].y - c[j].y) < FLT_EPSILON) { printf("%f\t .fcat line: %d\t .cat line: %d\n", c[j].x, i, j); match++; } } } printf("\n"); printf("\n"); printf("The files have %d matches. \n", match); fclose(fcat); fclose(cat); free(f); free(c); return 0; }