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

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

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

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

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

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

Программа должна сравнивать два текстовых файла,каждую строку из 1ого файла сравнивать с каждой строкой 2ого,и выводить на экран те строки,которые есть в 1ом файле,но нет во втором. Программа иногда работает правильно,а иногда выдает ненужные строки.Что не так? Пожалуйста,помогите исправить.
Код:
#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=0;
while(!feof(f1))
{ 
	fgets(s1,126,f1);
		while(!feof(f2))
		{
			fgets(s2,126,f2);
			if (strcmp(s1,s2)==0)
			{
				flag=0;
				break;
			}
			else 
				
					flag=1;
		
		}
	fseek(f2, 0, SEEK_SET); 
		if (flag==1)
			printf("%s",s1);
	}
	_getch();

}
Alina111 вне форума Ответить с цитированием
Старый 19.01.2013, 11:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вроде бы все верно.
Я на всякий случай бы перед считыванием очередной строки занулял ее переменку.
Что-то типа:
Код:
memset(s1,0,126)
fgets(s1,126,f1);
И для второй строки тоже самое.

Отладчик что говорит? Делала пошаговку?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.01.2013, 11:19   #3
Alina111
Пользователь
 
Регистрация: 20.12.2011
Сообщений: 40
По умолчанию

Да,просто вот ввела 4 строки в оба файла,и в них первое строка 1ого файла = последней строке 2ого файла и вот в этом случае почему то эта строка выводится на экран...
Alina111 вне форума Ответить с цитированием
Старый 19.01.2013, 11:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пошаговку пройди. Посмотри какие переменные какие значения получают.
ИМХО считывание у тебя неправильное. Считывается не строка а поток байт.
замени fgets на fscanf, он должен уметь строку считывать до символа перевода каретки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.01.2013, 19:58   #5
Alina111
Пользователь
 
Регистрация: 20.12.2011
Сообщений: 40
По умолчанию

Если считывать fscanf то будет считываться до пробела посимвольно,fgets считывает все верно. Программа правильная,дело не в ней. Просто не подумала о том, что нужно после последней строки в файлах нажать Enter, чтобы был переход на новую строку, потому программа и выдавала ненужные строки,так как считала строки с переходом на новую строку и без перехода разными=)
Alina111 вне форума Ответить с цитированием
Старый 19.01.2013, 20:54   #6
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

ИМХО, в таком случае, правильнее будет при проверке на равенство переход отбрасывать.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 19.01.2013, 21:00   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В таком случае нужно просто использовать другие более современные и надежные средства считывания из файла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять что не так aferistz Общие вопросы C/C++ 5 23.09.2010 02:21
строки и файлы не могу понять,что не так((((( marina_sergina Общие вопросы C/C++ 4 11.05.2010 07:49
строки и файлы не могу понять,что не так(((( marina_sergina Помощь студентам 1 11.05.2010 00:38
IBExpert, не могу понять что делаю не так! в чём проблема.... katia0017 SQL, базы данных 10 15.01.2010 18:33
Помогите дописать программу на Delphi 7 не могу понять что здесь не так matrix8325 Помощь студентам 1 30.04.2009 23:34