Замена символа в выводном потоке - на консоль выводятся нечитаемые символы - C (СИ)

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

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

Всем привет! Начал изучать программирование на Си. Как и полагается начал с Кернигана и Ричи. Столкнулся с небольшой трудностью в приведенной задаче (задача в коммнетарии к коду):
/* 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);
    }
}
Код успешно компилируется и выполняется, однако вместо заданных символов консоль выдает кракозябры. IDE - Geany ОС - Debian GNU/Linux Компилятор - gcc

Решение задачи: «Замена символа в выводном потоке - на консоль выводятся нечитаемые символы»

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;
}

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

В этом коде выполняется замена определённых символов в выводном потоке. Вот список действий, которые выполняются в коде:

  1. Вводится строка s[100], которая будет использоваться для хранения входной строки.
  2. Вводится символ c, который будет использоваться для проверки каждого вводимого символа.
  3. Инициализируется счётчик i равным 0.
  4. Запускается цикл while, который будет выполняться до тех пор, пока не будет введено 100 символов или не будет введён символ новой строки.
  5. Для каждого вводимого символа выполняется проверка с помощью оператора switch.
  6. Если введённый символ является табуляцией (\t), то в строку s записываются два символа обратной косой черты (\\).
  7. Если введённый символ является обратной косой чертой (\\), то в строку s записываются два символа обратной косой черты.
  8. Если введённый символ является восьмёркой (8), то в строку s записываются два символа обратной косой черты.
  9. Если введённый символ не является ни одним из вышеперечисленных, то он просто добавляется в строку s.
  10. После окончания цикла while, в строку s добавляется нулевой символ, чтобы обозначить конец строки.
  11. Строка s выводится на консоль с помощью функции puts.
  12. Код завершается и возвращает 0, что означает успешное выполнение.

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


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

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

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