#include #include int read_input(char **bufferptr) { FILE *fptr; fptr = fopen("scores.txt", "r"); if (fptr == NULL) { printf("ERROR: can't open file"); return 0; } fseek(fptr, 0L, SEEK_END); size_t sz = ftell(fptr); rewind(fptr); *bufferptr = malloc(sz + 1); if (*bufferptr == NULL) { fclose(fptr); printf("ERROR: couldn't allocate memory"); return 0; } size_t bytes_read = fread(*bufferptr, 1, sz, fptr); (*bufferptr)[bytes_read] = '\0'; fclose(fptr); return sz; } int total_score = 0; void pp(int position, int score) { printf("Die Top %d haben %d gezählt und machen damit %f%% aus.\n", position, score, (float)score / (float)total_score * 100); } int main() { char *buffer = NULL; int sz = read_input(&buffer); if (!sz) return 1; int i = -1, buf2i = -1; char *buffer2 = malloc(sz); // read total score while (1) { i++, buf2i++; if (buffer[i] == '\n') { buffer2[buf2i] = '\0'; total_score = atoi(buffer2); break; } buffer2[buf2i] = buffer[i]; } buf2i = -1; int position = 0, score = 0; // read other values while (1) { i++, buf2i++; if (i == sz) break; if (buffer[i] == '\n') { buffer2[buf2i] = '\0'; score += atoi(buffer2); buf2i = -1; position++; if (position == 1 || position == 3 || position == 5 || position == 10) pp(position, score); continue; } buffer2[buf2i] = buffer[i]; } }