В конце каждой строки вставить заданный символ - C (СИ)
Формулировка задачи:
Написать программу, выполняющую посимвольную обработку текстового файла (табл. 8). Ввод параметров организовать в командной строке запуска программы.
табл.8 В конце каждой строки вставить заданный символ 1.1. Имя входного файла 2.2. Заданный символ
Надеюсь на понимание. Спасибо!
Решение задачи: «В конце каждой строки вставить заданный символ»
textual
Листинг программы
#include <stdbool.h>
#include <stdio.h>
static void usage(const char programName[ ]) {
printf(
"Usage:\n"
" %s <input-file> <character-to-append>\n",
programName
);
}
int main(int argc, char* argv[ ]) {
if (argc != 3) {
usage(argv[0]);
return 2;
}
if (!argv[2][0] || argv[2][1]) {
fputs("Second argument must be a single character!\n", stderr);
usage(argv[0]);
return 1;
}
FILE* f = fopen(argv[1], "rb");
if (!f) {
fprintf(stderr, "Cannot open '%s'\n", argv[1]);
return 1;
}
int c;
bool cr = false, newline = false;
while (c = getc(f), c != EOF) {
if (c == '\r') {
cr = newline = true;
putchar(argv[2][0]);
} else if (cr) {
cr = false;
newline = c == '\n';
} else {
newline = c == '\n';
if (newline)
putchar(argv[2][0]);
}
putchar(c);
}
fclose(f);
if (!newline)
putchar(argv[2][0]);
return 0;
}
Объяснение кода листинга программы
- Программа добавляет символ в конец каждой строки файла.
- Если файл не открыт, программа выводит сообщение об ошибке и завершает работу с кодом 1.
- В цикле while программа считывает каждый символ из файла.
- Если символ является символом новой строки (\r), программа устанавливает флаг cr и флаг newline в true и выводит символ, указанный во втором аргументе.
- Если флаг cr установлен, программа выводит символ, указанный во втором аргументе, и сбрасывает флаг cr.
- Если флаг newline установлен, программа выводит символ, указанный во втором аргументе.
- Если файл открыт, программа считывает каждый символ до конца файла.
- Если файл не найден, программа выводит сообщение об ошибке и завершает работу с кодом 1.
- Программа закрывает файл.
- Если флаг newline не установлен, программа выводит символ, указанный во втором аргументе.
- Программа завершает работу с кодом 0.