#include #include int main() { FILE *fp; // file pointer float *data; // data pointer (array of floats) int i, file_size, arr_size; char filename[2049]; printf("Enter filename to read: "); scanf("%2048s", filename); fp = fopen(filename, "rb"); if (fp == NULL) { printf("Failed to open file\n"); return 1; } // get file size (technically isn't the best way because SEEK_END is undefined behaviour: // // "Library implementations are allowed to not meaningfully support SEEK_END // (therefore, code using it has no real standard portability)." // ~ https://cplusplus.com/reference/cstdio/fseek/ // // " Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), // has undefined behavior for a binary stream (because of possible trailing null characters) or // for any stream with state-dependent encoding that does not assuredly end in the initial shift // state. " // ~ https://port70.net/~nsz/c/c11/n1570.html#note268 // // it is also limited to 2GB files as it returns a signed integer // better to use something like this probably: // https://stackoverflow.com/a/238609 // // but louise uses fseek so i will too fseek(fp, 0, SEEK_END); file_size = ftell(fp); arr_size = file_size/sizeof(float); rewind(fp); // allocate memory and read data data = malloc(file_size); fread(data, sizeof(float), arr_size, fp); for (i = 0; i < arr_size; i++) { printf("%d %0.3f\n", i, data[i]); } free(data); }