Задача по файлам и строкам - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Даны 2 текстовых файла. В третий файл записать только те строки из 1-го файла, которые имеются во втором файле и в них есть не менее 3-х букв 'а'(на латинице). --- Вот мой недокод:
#include "stdafx.h"
#include <iostream>
#include "locale.h"
#include "string.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *f1,*f2,*f3;
    int z;
    char a;
    char s1[250],s2[250];
    setlocale(LC_ALL,"rus");
    f1=fopen("C:\\1.txt","r");
    f2=fopen("C:\\2.txt","r");
    f3=fopen("C:\\3.txt","w");
    if(f1==NULL || f2==NULL || f3==NULL)
    {
        printf("Один из файлов не удалось открыть");
        system("pause");
        return 0;
    }
    z=0;
    while(!feof(f2))
    { 
        fgets(s2,250,f2);
        if(s2 == 'a')
            z++;
        //{
            
        //  strcpy(kor,str);
        //}
    }
    while(!feof(f1))
        fgets(s1,250,f1);
 
    if(a>3||s1==s2)
        fputs(s1,f3);
    system("pause");
    return 0;
}
Я только начинаю , и еще мало ориентируюсь в ошибках и причинах их возникновения. Так вот, выводит 2 штуки : 1>d:\оаипп\8\8\8.cpp(29) : error C2446: ==: нет преобразования 'int' в 'char *' 1> Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции 1>d:\оаипп\8\8\8.cpp(29) : error C2040: ==: "char [250]" отличается по уровням косвенного обращения от "int" Объясните пожалуйста , как это исправить ?

Решение задачи: «Задача по файлам и строкам»

textual
Листинг программы
#include "stdafx.h"
#include <iostream>
#include "locale.h"
#include "string.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *f1,*f2,*f3;
    int z,i;
    char s[250],s2[250];
    setlocale(LC_ALL,"rus");
    f1=fopen("C:\\1.txt","r");
    f2=fopen("C:\\2.txt","r");
    f3=fopen("C:\\3.txt","w");
    
    if(f1==NULL || f2==NULL || f3==NULL)
    {
        printf("Один из файлов не удалось открыть");
        system("pause");
        return 0;
    }
    while(!feof(f1))
        fgets(s,250,f1);
    while(!feof(f2))
        fgets(s2,250,f2);
    if(strcmp(s,s2)==0)
    {
    z=0;
    for(i=0;250;i++)
    {
        if(s[i]='a')
            z++;
 
    }
    }
    if(z>3)
        fputs(s,f3);
    printf("Запись произведена. \n");
        
    fclose(f1);
    fclose(f2);
    fclose(f3);
    system("pause");
    return 0;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Определяется входная точка программы
  3. Объявляются переменные: файловые указатели f1, f2, f3, целочисленная переменная z, i и строковые переменные s, s2
  4. Устанавливается русская локаль
  5. Открываются файлы f1, f2 и f3 для чтения и записи соответственно
  6. Проверяется корректность открытия файлов. Если хотя бы один файл не открылся, выводится сообщение об ошибке и программа завершается
  7. Производится чтение из файла f1 и f2 до конца файла
  8. Проверяется равенство строк s и s2. Если они равны, то выполняется следующий блок кода
  9. Инициализируется переменная z равной 0
  10. Происходит проход по всем символам строки s. Если символ равен 'a', то увеличивается значение переменной z
  11. Проверяется условие z > 3. Если оно истинно, то строка s записывается в файл f3
  12. Выводится сообщение о записи в файл
  13. Файлы f1, f2 и f3 закрываются
  14. Выполняется пауза для пользователя
  15. Программа возвращает 0, что означает успешное завершение работы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы