Замена символа в выводном потоке - на консоль выводятся нечитаемые символы - C (СИ)
Формулировка задачи:
Всем привет!
Начал изучать программирование на Си. Как и полагается начал с Кернигана и Ричи. Столкнулся с небольшой трудностью в приведенной задаче (задача в коммнетарии к коду):
Код успешно компилируется и выполняется, однако вместо заданных символов консоль выдает кракозябры.
IDE - Geany
ОС - Debian GNU/Linux
Компилятор - gcc
/* tabreplace - заменяет знак табуляци на \t, backspace на \b, и \ на \\ */ #include <stdio.h> main () { int c; while ((c = getchar ()) != EOF) { if (c == 9) { c = "\t"; } if (c == 8) { c = "\b"; } if (c == 92) { c = "\\"; } putchar (c); } }
Решение задачи: «Замена символа в выводном потоке - на консоль выводятся нечитаемые символы»
textual
Листинг программы
#include <stdio.h> int main(void) { char s[100]; char c; int i=0; while ( i<100 && ( c = getc (stdin) ) != '\n' ) { switch (c) { case '\t' : s[i++]='\\';s[i++]='t';break; case 8 : s[i++]='\\';s[i++]='b';break; case '\\' : s[i++]='\\';s[i++]='\\'; break; default:s[i++]=c; } } s[i]=0; puts(s); return 0; }
Объяснение кода листинга программы
В этом коде выполняется замена определённых символов в выводном потоке. Вот список действий, которые выполняются в коде:
- Вводится строка
s[100]
, которая будет использоваться для хранения входной строки. - Вводится символ
c
, который будет использоваться для проверки каждого вводимого символа. - Инициализируется счётчик
i
равным 0. - Запускается цикл while, который будет выполняться до тех пор, пока не будет введено 100 символов или не будет введён символ новой строки.
- Для каждого вводимого символа выполняется проверка с помощью оператора switch.
- Если введённый символ является табуляцией (
\t
), то в строкуs
записываются два символа обратной косой черты (\\
). - Если введённый символ является обратной косой чертой (
\\
), то в строкуs
записываются два символа обратной косой черты. - Если введённый символ является восьмёркой (8), то в строку
s
записываются два символа обратной косой черты. - Если введённый символ не является ни одним из вышеперечисленных, то он просто добавляется в строку
s
. - После окончания цикла while, в строку
s
добавляется нулевой символ, чтобы обозначить конец строки. - Строка
s
выводится на консоль с помощью функцииputs
. - Код завершается и возвращает 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д