Реализовать программу перевода табуляций в пробелы - 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); //окончание работы с двумя файлами
}
Объяснение кода листинга программы
- Программа начинается с подключения необходимых библиотек и объявления основных переменных.
- Пользователю предлагается ввести имя файла для копирования.
- Имя файла сохраняется в массив fname.
- Если последний символ введенного имени файла - это символ новой строки, он удаляется.
- Файл открывается для чтения с помощью функции fopen.
- Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается.
- Файл открывается для записи с помощью функции fopen.
- Если файл не может быть создан, программа выводит сообщение об ошибке, закрывает исходный файл и завершается.
- Программа переходит к циклу while, который считывает каждый символ из исходного файла до конца файла.
- В зависимости от значения считанного символа, в модифицированный файл записывается табуляция или пробел.
- Если символ не является табуляцией или пробелом, он записывается в модифицированный файл без изменений.
- По завершении работы с файлами, они закрываются с помощью функции fclose.
- Программа завершается.