Реализовать программу перевода табуляций в пробелы - C (СИ)

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

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

Есть задание: реализовать программу перевода табуляций в пробелы (при их наличии) и пробелы в табуляции (при их наличии). Программа, скорее всего циклическая сама по себе, рекомендовано было использовать работу с файлами и до этого момента всё ясно. Но как реализовать счетчик, который будет из файла брать символы и их сравнивать? На этом застопорился и далее работа не идет.

Решение задачи: «Реализовать программу перевода табуляций в пробелы»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
main(int, char)
{
    FILE *file1, *file2;
    char fname[256];
    int ch;
    printf ("Enter the filename to be copyed:\n");
    fgets (fname, sizeof (fname), stdin); //со стандартного потока stdin (клавиатура) считывается имя файла который надо модифицировать
 
    if (fname[strlen(fname) - 1] ='\n')
    fname[strlen(fname) - 1] = 0; //тут мы приводим в порядок строку с именем файла чтобы в дальнейшем проверить ее
    file1 = fopen (fname,"r+"); //открываем исходный файл для чтения
 
    if (!file1){
        printf ("Can't find this file %s\n",fname);
        return 0; //если нет такого файла программа завершается
    }
 
    file2 = fopen ("output.txt","w+"); //открываем (создаем если не существует) модифицированный файл output.txt для правки
 
    if (!file2){
        printf ("Can't create new file! Write Error\n");
        fclose (file1);
        return 0; //если создать невозможно то программа завершается
    }
 
    while ((ch = getc(file1))!=EOF) //начинаем цикл: пока считанный символ не является признаком конца файла продолжаем
    {
        switch (ch){
        case ' ': putc ('\t', file2);
        break; //если считываемый символ пробел, записываем в файл табуляцию
 
        case '\t': putc (' ',file2);
        break; //если символ табуляции - записываем пробел
 
        default:  putc (ch, file2);
        break; //если любой другой символ, оставляем все без изменения
        }
    }
 
    fclose(file1);
    fclose(file2); //окончание работы с двумя файлами
}

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

  1. Программа начинается с подключения необходимых библиотек и объявления основных переменных.
  2. Пользователю предлагается ввести имя файла для копирования.
  3. Имя файла сохраняется в массив fname.
  4. Если последний символ введенного имени файла - это символ новой строки, он удаляется.
  5. Файл открывается для чтения с помощью функции fopen.
  6. Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается.
  7. Файл открывается для записи с помощью функции fopen.
  8. Если файл не может быть создан, программа выводит сообщение об ошибке, закрывает исходный файл и завершается.
  9. Программа переходит к циклу while, который считывает каждый символ из исходного файла до конца файла.
  10. В зависимости от значения считанного символа, в модифицированный файл записывается табуляция или пробел.
  11. Если символ не является табуляцией или пробелом, он записывается в модифицированный файл без изменений.
  12. По завершении работы с файлами, они закрываются с помощью функции fclose.
  13. Программа завершается.

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


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

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

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