Обратная косая черта является 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");