Alihandro
Alihandro

Помогите, пожалуйста, понять и исправить, что в программе не так, язык Си



Программа должна сравнивать два текстовых файла, каждую строку из 1ого файла сравнивать с каждой строкой 2ого, и выводить на экран те строки, которые есть в 1ом файле, но нет во втором. Программа иногда работает правильно, а иногда не выдает нужные строки. Что не так?
#include
#include
#include
#include
#include

int main()
{
setlocale(LC_CTYPE,"");
char s1[126],s2[126],i=0;
FILE *f1=fopen("1.txt","r");
FILE *f2;
int flag=0,len=0;
while(!feof(f1))
{
fgets(s1,126,f1);
len=strlen(s1);
f2=fopen("2.txt","r");
while(!feof(f2))
{
fgets(s2,126,f2);
for (i=0;i==s2)
{
flag=0;
}
else {
flag=1;
}
}
if (flag==0) break;
}
fclose(f2);
if (flag==1)
printf("%s",s1);
flag=0;
}
_getch();

}

Программу сразу написала, просто сначала задается вопрос, а потом дополнение пишется.

Жанна Юрина
Жанна Юрина

1. Программу на pastebin.com, это правильно сказали.
2. Строки сравниваются функцией strcmp
3. Открывать/закрывать файл 100 раз - тормоза гарантированы; есть же fseek!
4. Можно и без дополнений - видишь наверху ссылку "спрашивайте"? Да-да, большую, зеленую.

Alexey
Alexey

Программу только сюда не выкладывайте, а на пастебин к примеру.

AA
Azamat Amanturov

Для сравнения строк можно использовать функции типа strcmp().
Текст программы нечитаем.

Нина Москвина
Нина Москвина

В С строковые данные всегда на 1 символ длиннее чем сама строка, так как в конце строги ВСЕГДА присутствует символ конца строки. Поэтому нужно заводить массив длиной не 126 а 127

ЭМ
Эльмир Мамедов

Здесь вот моя версия решения

#include
#include
#include

#define MAX_STR_NUM 100
#define MAX_STR_LEN 126

#define INPUT_1 "1.txt"
#define INPUT_2 "2.txt"

int main()
{
FILE * fin1 = fopen(INPUT_1, "r");
FILE * fin2 = fopen(INPUT_2, "r");

char str1[ MAX_STR_LEN ], str2[ MAX_STR_NUM ][ MAX_STR_LEN ];

int c, i, j;

j = i = 0;
while ((c = getc(fin2)) != EOF) {
if (c == '\n') {
str2[ i ][ j ] = 0;
i++;
j = 0;
}
else {
str2[ i ][ j ] = c;
j++;
}
}

int r;
while ((c = getc(fin1)) != EOF) {
// oops, кончилать строка
if (c == '\n') {
str1[ i ] = '\0';

int yes = 0;
for (j = 0; str2[ j ][ 0 ]; j++) {
r = strcmp(str1, str2[ j ]);

if (!r)
yes = 1;
}

if (!yes)
printf("%s\n", str1);

i = 0;
}
else {
str1[ i ] = c;
i++;
}
}

fclose(fin1);
fclose(fin2);

return 0;
}
Тестировал, нормально работает, мой вам совет, почаще пользуйтесь препроцессором.

Похожие вопросы
Помогите написать программу на языке СИ/СИ++!!
программа на языке си
Помогите составить программу на языке СИ
помогите пожалуйста написать программу на языке Си
Помогите исправить ошибки в программе на языке СИ.
Помогите пожалуйста с программой на языке Си. (в описании)
Помогите доделать программу на языке Си
Помогите написать программу в языке "СИ".
Помогите исправить программу на языке си++
Помогите написать программу на языке Си.