невозможно сравнить целочисленную переменную, содержащую значение ASCII, с помощью getchar () с '\ t', '\'; - PullRequest
0 голосов
/ 22 мая 2019

Я пишу код на языке c, с пользовательским вводом. И возникают проблемы при сравнении переменной int с '\', '\ t' (обычно это экранирующие последовательности). Здесь целочисленная переменная хранит значение символов ASCII. И приобретается getchar().

Я пытался изменить компилятор, а также пытался сделать это с scanf() и сохранением значения на другом уровне. Но для каждого процесса возьмите '\' как другой символ и 't' как другой. И даже не могу сравнить "\". Отображение пропущенного завершающего символа.

#include <stdio.h>

int main()
{
    int c;
    while((c=getchar())!=EOF)
    {
        if(c=='\')
            printf('x');
    }
    return 0;
}

Я хочу напечатать x, если c=='\'. реальный код слишком длинный. Я уверен, что нет ошибок в других частях, но не смог получить это. каждый код, который я видел онлайн, работает. Но не с моим.

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Обратная косая черта является escape-символом, вам нужно использовать двойную обратную косую черту, чтобы сделать символьный литерал, содержащий одну обратную косую черту:

if (c=='\\')

Без дополнительной обратной косой черты одиночная обратная косая черта экранирует закрывающую одинарную кавычку,поэтому символьный литерал не заканчивается, и код не будет компилироваться (в редких случаях он, вероятно, компилирует мусор).

Что касается \t, если вы хотите сравнить с реальной вкладкойif (c=='\t') работает просто отлично.Но если вы хотите распознать буквальную обратную косую черту, за которой следует t, вам необходимо распознать ее по двум частям: сначала обратную косую черту, а затем прочитать другой символ, чтобы увидеть t, например:

int main()
{
    int c;
    while((c=getchar())!=EOF)
    {
        if (c == '\\') {
            printf("Found escape beginning\n");
            if ((c = getchar()) == EOF) break;
            if (c == 't')
                printf("Found backslashed 't'\n");
        }
    }
    return 0;
}

Примечание. Ваш printf также был неверным, поскольку он передавал символьный литерал в printf, а не строковый литерал.Я исправил это в расширенном коде выше;Ваш исходный код изменится printf('x'); на printf("x");

0 голосов
/ 22 мая 2019

Внутри строки или символьной константы символ \ действует как escape-символ, чтобы придать следующему символу особое значение. В вашем случае \ экранирует закрывающий символ ', что означает, что указанная константа символа не является закрытой.

Последовательность перехода для литерала \ равна \\. Итак, что вы хотите:

if(c=='\\')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...