Напишите программу для копирования ввода в вывод - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь написать программу, которая копирует свой ввод в свой вывод.Я предполагаю, что если мне выдается следующая строка: «Здравствуйте, я / с», она должна вывести: «Здравствуйте, \ t am \ c», я прав?

Я пытался читать онлайн о stdio.ч библиотека.

#include <stdio.h>
/* Write a program to copy its input to its output, replacing each tab by \t, each backspace by \b, and each backslash by \\. This makes tabs and backspaces visible in an unambigous way.*/

int main()
{
    char c;

    while ((c = getchar()) != EOF){

        if ((c = getchar()) == '\t'){
            putchar('\t');
        }
        if (c == '\b'){
            puts("\b");
        }
        if (c == '\\'){
            puts("\\");
        }

        putchar(c);
    }

}

Пожалуйста, помогите мне понять этот вопрос и объяснить, почему мой код не работает.

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

Две проблемы.Первый:

while ((c = getchar()) != EOF){

Вы должны сравнить возвращаемое значение getchar() с EOF.Здесь вы сравниваете c с EOF.Это неверно, потому что c - это char, а getchar возвращает int.Итак, вы должны сравнивать int с EOF и сравнивать char с EOF.Это неправильно.

Второй:

    if ((c = getchar()) == '\t'){

Почему вы снова звоните getchar?Вы не хотите читать другой символ.

0 голосов
/ 24 июня 2019
#include <stdio.h>
/* Write a program to copy its input to its output, replacing each tab by \t, each backspace by \b, and each backslash by \\. This makes tabs and backspaces visible in an unambigous way.*/
// c is a char and getchar returns an int
int main()
{
    char c;

    while ((c = getchar()) != EOF)
    {

        if (c == '\t'){
            //putchar('\t');
            printf("\\t");
        }
        else if (c == '\b'){
            printf("//b");
            //puts("\b");
        }
        else if (c == '\\'){
            printf("\\\\");
            // no, this is gay(Ruby code) -> puts("\\");
        } else  {

        putchar(c);
        }
    }

}

мой код был похож - я просто забыл, что мог бы также просто `` printf () "в C вместо гораздо более строгой функции putchar ().

...