Другие языки программирования и технологии

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

1. Программу на pastebin.com, это правильно сказали.
2. Строки сравниваются функцией strcmp
3. Открывать/закрывать файл 100 раз - тормоза гарантированы; есть же fseek!
4. Можно и без дополнений - видишь наверху ссылку "спрашивайте"? Да-да, большую, зеленую.
Илья Казанков
Илья Казанков
93 097
Лучший ответ
Для сравнения строк можно использовать функции типа strcmp().
Текст программы нечитаем.
Игорь Пушкин
Игорь Пушкин
87 228
Программу только сюда не выкладывайте, а на пастебин к примеру.
ZM
Zoirjon Masharipov
34 701
В С строковые данные всегда на 1 символ длиннее чем сама строка, так как в конце строги ВСЕГДА присутствует символ конца строки. Поэтому нужно заводить массив длиной не 126 а 127
Здесь вот моя версия решения

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#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;
}
Тестировал, нормально работает, мой вам совет, почаще пользуйтесь препроцессором.