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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2019, 20:17   #1
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию строки в файлах

Добрый вечер. Программа должна сортировать в файле данные людей(фамилия имя номер телефона дата рождения) сначала по годам рождения и затем по фамилиям. Когда сортирую данные по фамилиям, то сравнивая строки у первой строки находящейся в файле она правильно читает 0 символ, а у остальных строк - пробел. Из-за этого она неверно сравнивает строки.
Полный код:
Код:
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
#include <Windows.h>
FILE *fp, *f,*fg;
struct Note
{
	char family[20],name[20],phone[17];
	int dmg[3];
};
void sortirovka1(struct Note *st, int n)
{
	
	int i,a=0,j,m=1,max1=0,max2=0,p=0,r=1,d=1,h,w=0,v=0,q=1,kl=1,z,cd;
	float y;
	char s[120],c,t[120],b[120],g[]="\n",smx1[120],smx2[120],pust[120];
	memset(pust, 0, 120);
	memset(smx1, 0, 120);
	while ( r==1 )
	{
	
	
		
	r=0;
	f = fopen("C:\\filesvijiginmudak\\peresapis1.txt", "a");
	if (m==1)
	{
	fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "r"); 
	for (i=0;i<n;i++) 
	{    
		p=0;
		memset(s, 0, 120);	
		for (j=0; j<5;j++)
		{
	do
    {
      c = fgetc(fp);
      s[p] = c;
      p++;
    } while (c != ' ');
	}
	fscanf(fp, "%d", &a);
	//printf("%d ", a);
	if (a>max1)
	{
	max1=a;
	strcpy(t, s);
	}
	}
	strcpy(b, t);/*
	printf("%s",b);
	printf("%d",max1);
	fprintf(f, "%s", b);
	fprintf(f,"%d",max1);*/
	fclose(fp);	
	r=1;	
	}




	for (i=0;i<n;i++)
	{
	fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "r");	
	fseek(fp, w , SEEK_SET);
	p=0;
		memset(s, 0, 120);
		for (j=0; j<5;j++)
		{
	do
    {
      c = fgetc(fp);
      s[p]=c;
      p++;
    } while (c != ' ');
	}
	fscanf(fp, "%d", &a);
	//printf("%d", a);
	w=ftell(fp);
	
	//printf("%d\n", w);
	//puts(s);	
	if (a==max1 && (strcmp(s,b) != 0) && d==1)
	{v=1;
		//puts(s);
		//puts(b);		
		while (kl != 0)
		{
			kl=0;
		if (q==1)
		{
		fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "r");					
		for (z=0;z<n;z++)
	{    
		p=0;
		memset(s, 0, 120);	
		for (j=0; j<5;j++)
		{
	do
    {
      c = fgetc(fp);
      s[p] = c;
      p++;
    } while (c != ' ');
	}
	//y=strcmp(s,b);
	//printf("%s",s);
	//printf("%s",b);
	//printf("\n%f\n", y);	
	fscanf(fp, "%d", &h);
		//printf("%s", s);//
	//printf("%d ", h);
	//printf("%d",a);
	if ((h == a) && (strcmp(s,b) !=0))
	{
		//printf("ghf");
		if (strcmp(s,smx1) > 0)
		strcpy(t, s);	
		//printf("%s", smx1);
	}
	//printf("%s", smx1);
	
	/*{
	strcpy(t, s);
	printf("%s",t);
	printf("%d",max1);
	fprintf(f, "%s", t);
	fprintf(f,"%d",max1);
	r=1;	
	}*/
	}
	strcpy(smx1,t);
	printf("%c ", b[0]);
	printf("%c", smx1[0]);
	printf("%s", smx1);
	//printf("%d",cd );
	if (strcmp(b,smx1) > 0)
		{strcpy(smx1,b);}
	kl=1;
	printf("%s", smx1);
	printf("%d", h);
	fclose(fp);
		}	
	fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "r");
	memset(smx2, 0, 120);
		for (z=0;z<n;z++)
	{    
		p=0;
		memset(s, 0, 120);	
		for (j=0; j<5;j++)
		{
	do
    {
      c = fgetc(fp);
      s[p] = c;
      p++;
    } while (c != ' ');
	}
	fscanf(fp, "%d", &h);
	//printf("%d ", h);
	//puts(s);  
	if ((h == a) && (strcmp(s,b) !=0))
	{
		if ((strcmp(s,smx1) < 0) && (strcmp(s,smx2) > 0))
		{strcpy(smx2,s);
		kl=1;}	
	}
	}
	fclose(fp);
	if (strcmp(smx2,pust) != 0)
	{printf("%s", smx2);
	printf("%d", h);}
	strcpy(smx1,smx2);
	memset(smx2, 0, 120);
	q=0;
}
		d=0;
		fclose(fp);
		break;
	}fclose(fp);
	}
	if (v==1)
	{fprintf(f,"%s",g);
	printf("%s",g);}
	v=0;
	w=0;
	for (i=0;i<n;i++) //ïîèñê max2	
	{
	fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "r");	
	fseek(fp, w , SEEK_SET);
	p=0;
		memset(s, 0, 120);
		for (j=0; j<5;j++)
		{
	do
    {
      c = fgetc(fp);
      s[p]=c;
      p++;
    } while (c != ' ');
	}
	fscanf(fp, "%d", &a);
	//printf("%d", a);
	w=ftell(fp);
	//printf("%d\n", w);
	if ((a>max2) && (a<max1)) //ïîèñê ìàêñèìóìà 2
	{
	max2=a;
	strcpy(t, s);
	d=1;
	//printf(" fg ");	
	}
	//printf(" fg ");	
	fclose(fp);
	}
	w=0;
	if (d==1)
	{
		r=1;
	if (max2 == 0)
	break;
	if (m ==1)
	{
	printf("%s",b);
	printf("%d",max1);
	fprintf(f, "%s", b);
	fprintf(f,"%d",max1);	
	}
	if (m==0)
	{
	printf("%s",t);
	printf("%d",max2);
	fprintf(f, "%s", t);
	fprintf(f,"%d",max2);
	}
	strcpy(b, t);	
	max1=max2;
	//printf("%s", b);
	max2=0;	
	//printf("fgn");
	/*	
	fg = fopen("C:\\filesvijiginmudak\\peresapis3.txt", "a");
	f = fopen("C:\\filesvijiginmudak\\peresapis1.txt", "r");
	*/
	}
	m=0;
	v=0;
}
}

int main(void)
{
	int n,i;
	Note *st;
	 st = new Note;
	printf("Ñêîëüêî ëþäåé?");
	scanf("%d", &n);
	st = new Note[n];
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	/*
	for (i=0;i<n; i++)
	{
  printf("ôÀÌÈËÈß ");          
   gets ( st->family ); 
   printf("Èìÿ ");   
   gets ( st->name ); 
   printf("Òåëåôîí ");
   gets ( st->phone );
   printf("Äàòà ðîæäåíèÿ");  
   scanf("%d%d%d", &st->dmg[0], &st->dmg[1], &st->dmg[2]);   
  fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "a");  
fprintf(fp,"%s%s%s %d %d %d\n",    
         st->family, st->name, st->phone, st->dmg[0], st->dmg[1], st->dmg[2]); 
 }
fclose ( fp ); 
	*/
sortirovka1(st, n);
return 0;
}
Проблемный участок:

Код:
while ( r==1 )
	{	
	r=0;
	f = fopen("C:\\filesvijiginmudak\\peresapis1.txt", "a");
	if (m==1)
	{
	fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "r"); 
	for (i=0;i<n;i++) 
	{    
		p=0;
		memset(s, 0, 120);	
		for (j=0; j<5;j++)
		{
	do
    {
      c = fgetc(fp);
      s[p] = c;
      p++;
    } while (c != ' ');
	}
	fscanf(fp, "%d", &a);
	//printf("%d ", a);
	if (a>max1)
	{
	max1=a;
	strcpy(t, s);
	}
	}
	strcpy(b, t);
	fclose(fp);	
	r=1;	
	}
	for (i=0;i<n;i++)
	{
	fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "r");	
	fseek(fp, w , SEEK_SET);
	p=0;
		memset(s, 0, 120);
		for (j=0; j<5;j++)
		{
	do
    {
      c = fgetc(fp);
      s[p]=c;
      p++;
    } while (c != ' ');
	}
	fscanf(fp, "%d", &a);
	w=ftell(fp);
	if (a==max1 && (strcmp(s,b) != 0) && d==1)
	{v=1;
		//puts(s);
		//puts(b);		
		while (kl != 0)
		{
			kl=0;
		if (q==1)
		{
		fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "r");					
		for (z=0;z<n;z++)
	{    
		p=0;
		memset(s, 0, 120);	
		for (j=0; j<5;j++)
		{
	do
    {
      c = fgetc(fp);
      s[p] = c;
      p++;
    } while (c != ' ');
	}
	fscanf(fp, "%d", &h);
	if ((h == a) && (strcmp(s,b) !=0))
	{
		if (strcmp(s,smx1) > 0)
		strcpy(t, s);	
	}
	}
	strcpy(smx1,t);
	printf("%c ", b[0]);
	printf("%c", smx1[0]);
	printf("%s", smx1);
	//printf("%d",cd );
	if (strcmp(b,smx1) > 0)
		{strcpy(smx1,b);}
	kl=1;
	printf("%s", smx1);
	printf("%d", h);
	fclose(fp);
		}
Мне к пятнице надо

Последний раз редактировалось Serge_Bliznykov; 21.05.2019 в 22:48.
Егор28г вне форума Ответить с цитированием
Старый 23.05.2019, 19:48   #2
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию

спасибо за вашу помощь всем добра

Последний раз редактировалось Егор28г; 24.05.2019 в 09:14.
Егор28г вне форума Ответить с цитированием
Старый 24.05.2019, 04:35   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Егор28г Посмотреть сообщение
спасибо за вашу помощь
Всегда пожалуйста, спрашивайте еще.
waleri вне форума Ответить с цитированием
Старый 24.05.2019, 06:24   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Егор28г Посмотреть сообщение
Код:
fp = fopen("C:\\filesvijiginmudak\\peresapis2.txt", "r");
Это препод, что ли?
Black Fregat вне форума Ответить с цитированием
Старый 24.05.2019, 09:12   #5
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию

как закрыть тему в ней больше нет необходимости
Егор28г вне форума Ответить с цитированием
Старый 24.05.2019, 10:18   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

никак.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.05.2019, 10:34   #7
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию

почему никак. зачем ей висеть если я уже решил свою проблему?
Егор28г вне форума Ответить с цитированием
Старый 24.05.2019, 10:35   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А что, жалко что ли?)

Не пишите в нее и упадет вниз.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
О файлах Вадим Вергун Паскаль, Turbo Pascal, PascalABC.NET 2 10.12.2014 07:12
искать в файлах строки с одинаковым значение2 и производить замену значение1 из файл2 в файл1 - bash samCS Помощь студентам 4 11.08.2011 01:53
Два текстовых файла. Записать в третий те строки, которые есть и в первом, и во втором файлах (Паскаль) dark999 Паскаль, Turbo Pascal, PascalABC.NET 4 28.03.2011 21:41