Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2014, 09:23   #1
Solar69
 
Регистрация: 20.11.2013
Сообщений: 7
По умолчанию Сортировка данных двух текст.файлов

Задача:имеется 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' || getc(fp2)=='\0' )
        {
            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' || getc(fp1)=='\0')
        {
            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();
}
Solar69 вне форума Ответить с цитированием
Старый 09.04.2014, 15:01   #2
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию

Сделайте эхо вывод что бы было видно какие данные вы получили из файлов.
После подсчета строк в файле нужно вернуть указатель текущей позиции файла на начало. Что то вроде
Код:
fseek(fp1, 0L, SEEK_SET);
Ну и сама идея не совсем продуманная, много лишних действий мне кажется.
niwssg вне форума Ответить с цитированием
Старый 09.04.2014, 16:58   #3
Solar69
 
Регистрация: 20.11.2013
Сообщений: 7
По умолчанию

сделал fseek,но что то пока не помогло,ну ,а на счет идеи вродь все продумано,дописываю все данные в 1 файл вывожу все в массив структур там сортирую и записываю 6 посл элементов отсортированного массива в новый файл.
попробывал отдельно сделать счетчик строк,но он почему то не работает корректно,в чем может быть проблема.И еще попробывал посмотреть что находится в буфере,там из того что число строк считается не корректно поэтому к примеру выдает 1ые 4 строчки.И еще почему считывания всех данных из одного файла они зануляются(
Код:
#include <stdio.h>
#include <conio.h>
int main()
{
	FILE *fp;
	fp=fopen("strings.txt", "r");
	int sch=0;
	while(getc(fp)!=EOF)
	{
		if((getc(fp)=='\n') || (getc(fp)=='\0'))
		{
			sch++;
		}
	}
	printf("%d",sch);
	getch();
}

Последний раз редактировалось Solar69; 09.04.2014 в 17:12.
Solar69 вне форума Ответить с цитированием
Старый 09.04.2014, 17:27   #4
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию

Код:
while(getc(fp)!=EOF)
	{
		if((getc(fp)=='\n') || (getc(fp)=='\0'))
		{
			sch++;
		}
	}
Попробуйте как то так :
Код:
  while(!feof(fp1))
    {
         while(fscanf(fp1, "%*[^\n]%*c") != EOF)
             max++;
         if (ferror(fp1))
            printf("error\n");
    }
Цитата:
дописываю все данные в 1 файл вывожу все в массив структур там сортирую и записываю 6 посл элементов отсортированного массива в новый файл.
Например зачем переписывать все в файл если можно сразу писать в массив структур получив в max количество элементов в двух файлах.
niwssg вне форума Ответить с цитированием
Старый 09.04.2014, 17:45   #5
Solar69
 
Регистрация: 20.11.2013
Сообщений: 7
По умолчанию

Огромное спасибо за советы,все помогло только можете объяснить ,что такое %*[^\n]%*c ,просто первый раз встречаюсь с таким поиском конца строки.

Последний раз редактировалось Solar69; 09.04.2014 в 18:33.
Solar69 вне форума Ответить с цитированием
Старый 10.04.2014, 09:20   #6
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию

Код:
%[set]
При использовании набора сканируемых символов функция scanf() продолжает читать символы до тех пор, пока не встретится символ, отсутствующий в заданном наборе.
Если первый символ в наборе является знаком ^, то получаем обратный эффект: входное поле читается до тех пор, пока не встретится символ из заданного набора сканируемых символов.
Код:
*
стоящий после знака % и перед кодом формата, прочитает данные заданного типа, но запретит их присваивание.
niwssg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан текст (слова из строчных латинских букв). Построить множество, состоящее из букв, входящих в текст не менее двух раз Grenki Паскаль, Turbo Pascal, PascalABC.NET 5 25.03.2014 14:40
Сортировка слиянием двух файлов. recycler Помощь студентам 0 16.05.2012 12:51
Как организовать импорт двух файлов в одну базу данных SergeyK Microsoft Office Access 2 15.10.2010 13:36
Excel -скрипт сравнения двух файлов и копирования данных из одного в другой Snake_ Microsoft Office Excel 11 29.08.2010 13:19
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32