1. Программу на pastebin.com, это правильно сказали.
2. Строки сравниваются функцией strcmp
3. Открывать/закрывать файл 100 раз - тормоза гарантированы; есть же fseek!
4. Можно и без дополнений - видишь наверху ссылку "спрашивайте"? Да-да, большую, зеленую.
Другие языки программирования и технологии
Помогите, пожалуйста, понять и исправить, что в программе не так, язык Си
Для сравнения строк можно использовать функции типа strcmp().
Текст программы нечитаем.
Текст программы нечитаем.
Программу только сюда не выкладывайте, а на пастебин к примеру.
В С строковые данные всегда на 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;
}
Тестировал, нормально работает, мой вам совет, почаще пользуйтесь препроцессором.
#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;
}
Тестировал, нормально работает, мой вам совет, почаще пользуйтесь препроцессором.
Похожие вопросы
- ПОМОГИТЕ ПОЖАЛУЙСТА ИСПРАВИТЬ КОД, НЕ МОГУ ПОНЯТЬ В ЧЁМ ПРИЧИНА, ПОЧЕМУ НЕ ПРАВИЛЬНО РАБОТАЕТ? ЯЗЫК СИ.
- ПОМОГИТЕ ПОЖАЛУЙСТА, КТО ЗНАЕТ ИНФОРМАТИКУ. НУЖНО НАПИСАТЬ ПРОГРАММУ НА С++.
- Объясните, пожалуйста, что за что в этой программе отвечает подробно. язык с ++
- Помогите пожалуйста понять информатику и программирование.
- Помогите пожалуйста подобрать тест на которых моя программа заваливается... C++
- Помогите пожалуйста составить решение с задачей по программированию(на любом языке программирования)
- Помогите, пожалуйста, понять значение доступов к сайту. Внутри.
- Язык Си. Помогите пожалуйста написать простую программу.
- Помогите исправить ошибку в программе на Си
- Помогите, пожалуйста, написать программу на языке Си