Сортировка данных двух текстовых файлов. Счетчик количества строк работает некорректно - 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, который отслеживает количество строк в файле.
- Цикл продолжается до тех пор, пока не будет достигнут конец файла.