Чтение файлов и вывод в stdout - C (СИ)

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

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

Необходимо выводить два файла по строке в следующем порядке: 1 строка 1 файла - 1 строка второго файла - 2 строка первого файла - 2 строка 2 файла ... и т.д.
#include <stdio.h>
#include <stdlib.h>
//#include <string.h>
#define MAX 100
 
int main(int argc, char **argv)
{   
    char * string1 = (char*)malloc(MAX*sizeof(char));
    char * string2 = (char*)malloc(MAX*sizeof(char));
    int count1, count2;
    FILE *fp, *fa;
    if(argc < 2)
    {
        fprintf(stderr, "Вы не ввели имена файлов в качества аргументов\n");
    }
    if(argc < 3)
    {
        fprintf(stderr, "Вы не ввели имя второго файла в качества аргумена\n"); 
    }
    if ((fp = fopen(argv[1], "r")) == NULL || (fa = fopen(argv[2], "r")) == NULL)
    {
        fprintf(stderr, "Ошибка при открытии файлов\n");
        exit(1);
    }
    while(fgets(string1, sizeof(string1), fp) || fgets(string2, sizeof(string2), fa))
    {   
        if(string1 == '\0' && string2 != '\0')
        {
                fputs(string2, stdout);
        }
        else if(string1 != '\0' && string2 == '\0')
        {
            fputs(string1, stdout); 
        }
        else
        {
            fputs(string1, stdout);
            fputs(string2, stdout);
        }
    }
    free(string1);
    free(string2);
    if(fclose(fp) != 0 || fclose(fa) != 0)
    {
        fprintf(stderr, "Ошибка при закрытии файла.\n");
    }
return 0;
}
Вывод получается следующим:
1111111111111111111111111111111111111 2222222222222222222222222222222222222 aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaa bbbbbbb bbbbbbb bbbbbbb bbbbbbb bbbbbbb bbbbbb
В двух файлах записано по две строки. В одном строки цифр 1 и 2, в другом- строки букв a и b. Не имею представления, по какой причине программа делит строки и не чередует их. Также не ясны причины пробелов.

Решение задачи: «Чтение файлов и вывод в stdout»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
//#include <string.h>
#define MAX 100
 
int main(int argc, char **argv)
{   
    char * string1 = (char*)malloc(MAX*sizeof(char));
    char * string2 = (char*)malloc(MAX*sizeof(char));
    char *str1;
    char *str2;
    int count1, count2;
    FILE *fp, *fa;
    if(argc < 2)
    {
        fprintf(stderr, "Вы не ввели имена файлов в качества аргументов\n");
    }
    if(argc < 3)
    {
        fprintf(stderr, "Вы не ввели имя второго файла в качества аргумена\n"); 
    }
    if ((fp = fopen(argv[1], "r")) == NULL || (fa = fopen(argv[2], "r")) == NULL)
    {
        fprintf(stderr, "Ошибка при открытии файлов\n");
        exit(1);
    }
    while(1)
    {   
    str1=fgets(string1, MAX, fp);
    str2=fgets(string2, MAX, fa);
 
        if((str1 == NULL) && (str2 != NULL))
        {
                fputs(string2, stdout);
        }
        else if((str1 != NULL) && (str2 == NULL))
        {
            fputs(string1, stdout); 
        }
        else if((str1==NULL) && (str2==NULL)) break;
        else
        {
            fputs(str1, stdout);
            fputs(str2, stdout);
        }
    }
    free(string1);
    free(string2);
    if(fclose(fp) != 0 || fclose(fa) != 0)
    {
        fprintf(stderr, "Ошибка при закрытии файла.\n");
    }
return 0;
}

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

  1. Включаются необходимые заголовочные файлы
  2. Определяется максимальное значение счетчика для циклов
  3. Выполняется проверка наличия имен файлов в качестве аргументов командной строки
  4. Выполняется проверка наличия второго имени файла в качестве аргумента командной строки
  5. Открываются файлы для чтения
  6. Устанавливаются начальные значения для строк и счетчиков
  7. В цикле while считываются строки из файлов
  8. Проверяется наличие строк после чтения
  9. Если строка 1 отсутствует и строка 2 присутствует, то выводится строка 2
  10. Если строка 1 присутствует и строка 2 отсутствует, то выводится строка 1
  11. Если обе строки отсутствуют, то цикл прерывается
  12. Выполняется освобождение памяти, выделенной под строки
  13. Проверяется корректность закрытия файлов
  14. Завершается выполнение программы

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


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

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

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