Сортировка данных двух текстовых файлов. Счетчик количества строк работает некорректно - C (СИ)
Формулировка задачи:
Задача:имеется 2 файла с данными на игроков 2 команд каждая строка состоит из имени,голов,пасов,отсортировать данные этих 2 файлов так чтобы в 3 файле были помещены 6 самых результативных игрока.
Написал код но он почему не работает,есть 2 проблемы ,1ая это то что счетчик кол-ва строк работает не верно и вторая почему то результат не записывается в файл.Помогите доработать код,заранее спасибо.
Вот мой код :
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> typedef struct com { char name[60]; int goly; int pasi; } comanda; int cmp1(const void * a, const void *b) { comanda * pa = (comanda *)a; comanda * pb = (comanda *)b; return ( pa->goly == pb->goly ) ? pa->pasi - pb->pasi : pa->goly - pb->goly; } int main() { int sch=0,n=0,i=0; FILE *fp1; fp1=fopen("dinamo.txt","a"); FILE *fp2; fp2=fopen("spartak.txt","r"); while(getc(fp2)!=EOF) { if(getc(fp2)=='\n') { n++;//schet4ik kol-va strok } } comanda spartak[n]; while(i<n) { fscanf (fp2, "%s%d%d", spartak[i].name,&spartak[i].goly,&spartak[i].pasi);//zapis' dannih iz fila fp2 v file fp 1 fprintf(fp1, "\n%s %d %d", spartak[i].name,spartak[i].goly, spartak[i].pasi); i++; } while(getc(fp1)!=EOF) { if(getc(fp1)=='\n') { sch++;//schetchik strok } } i=0; comanda obsch[sch]; while(getc(fp1)!=EOF) { fscanf (fp1, "%s%d%d",obsch[i].name,&obsch[i].goly,&obsch[i].pasi); i++;//zapis' vseh igrokov dl9 otsortirovki } qsort(obsch, sch, sizeof(comanda), cmp1);//sortirovka(posl element samiy maksimal'niy) FILE *fp3; fp3=fopen("rezultat.txt","a");//zapis' kone4nogo rezul'tata for(i=sch;i<sch-6;i--) { fprintf(fp3, "\n%s %d %d", obsch[i].name,obsch[i].goly, obsch[i].pasi); } printf("%s","Done"); getch(); }
Ну что никто ничем помочь не может?
up.
Решение задачи: «Сортировка данных двух текстовых файлов. Счетчик количества строк работает некорректно»
textual
Листинг программы
while(getc(fp2)!=EOF) { if(getc(fp2)=='\n') { n++;//schet4ik kol-va strok } }
Объяснение кода листинга программы
- В цикле while открывается файл fp2 для чтения.
- Внутри цикла проверяется, не является ли текущий символ концом файла (EOF).
- Если текущий символ - это символ новой строки (\n), то увеличивается счетчик n, который отслеживает количество строк в файле.
- Цикл продолжается до тех пор, пока не будет достигнут конец файла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д