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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2013, 13:16   #1
Alina111
Пользователь
 
Регистрация: 20.12.2011
Сообщений: 40
По умолчанию Сравнение строк файлов Си

Задание такое:вывести на экран те строки, которые есть в 1 файле, но нет во втором. Т.е. нужно каждую строку 1ого файла сравнивать с каждой строкой второго.Проблема в том, что программа каждый раз когда находит несоответствие во втором файле выводит ее на экран,а надо один раз после того как проверит все строки 2ого файла.Вот что получилось:
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>

int main()
{
	setlocale(LC_CTYPE,"");
char s1[126],s2[126];
FILE *f1=fopen("1.txt","r");
FILE *f2=fopen("2.txt","r");
int flag=1;
while(!feof(f1))
{ 
	flag=0;
	fgets(s1,126,f1);
		while(!feof(f2))
		{
			fgets(s2,126,f2);
			if (strcmp(s1,s2)==0)
			{
				flag=0;
				break;
			}
			else 
				
					flag=1;
		
		if (flag==1)
		printf("%s",s1);
		}
_getch();
}
}
Alina111 вне форума Ответить с цитированием
Старый 18.01.2013, 13:26   #2
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

Если я правильно понял проблему, то нужно вынести вывод из внутреннего цикла во внешний:
Код:
while(!feof(f1))
{ 
	flag=0;
	fgets(s1,126,f1);
		while(!feof(f2))
		{
			fgets(s2,126,f2);
			if (strcmp(s1,s2)==0)
			{
				flag=0;
				break;
			}
			else 
				
					flag=1;
		
		//if (flag==1) Было здесь
		//printf("%s",s1);
		}
	if (flag==1) // Стало здесь
	    printf("%s",s1);
        _getch();
}
}
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 18.01.2013, 13:33   #3
Alina111
Пользователь
 
Регистрация: 20.12.2011
Сообщений: 40
По умолчанию

Спасибо!
Только тут еще одна ошибка получается,после считывания первой строки первого файла и ее сравнения со строками второго не переходит к следующей строке первого файла. С этим не поможете?
Alina111 вне форума Ответить с цитированием
Старый 18.01.2013, 14:16   #4
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

Помогу, почему бы и нет. Ошибка в том, что второй файл кончается, и после обработки первой строки из первого фала feof(f2) всегда равно true. Когда дочитали до конца второго файла, нужно вернуться в его начало:

Код:
		fseek(f2, 0, SEEK_SET); //вернуться на первую позицию файла f2
		if (flag==1)
			printf("%s",s1);
	}
	_getch();

}
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк двух текстовых файлов Alina111 Общие вопросы C/C++ 4 10.01.2013 10:03
сравнение строк goluzov Общие вопросы C/C++ 4 27.08.2012 01:10
Сравнение строк revaldo666 Общие вопросы C/C++ 6 05.12.2011 18:27
Макрос на сравнение и подсчет в первом столбце строк, и сумирование значений этих строк в другом столбце Shpr0T Microsoft Office Excel 8 30.08.2010 17:52
Сравнение строк Jasper92 Общие вопросы C/C++ 6 23.12.2009 12:49