无法通过getchar()将包含ASCII值的整数变量与'\ t','\';

时间:2019-05-22 15:18:00

标签: c

我正在用C语言编写带有自定义输入的代码。并且在将int变量与'\','\ t'(通常为转义序列)进行比较时遇到问题。此处的整数变量存储字符的ASCII值。并且由getchar()获取。

我试图更改编译器,还尝试使用scanf()进行此操作并将值存储在另一个级别。但是对于每个过程,请以“ \”为不同的字符,以“ t”为不同的字符。而且甚至不能比较“ \”。显示缺少的终止符。

#include <stdio.h>

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

如果c=='\',我想打印x。真正的代码有点长。我相信其他部分都没有错误,但无法得到。我在网上看到的每个代码都有效。但不是我的。

2 个答案:

答案 0 :(得分:1)

反斜杠是转义字符,您需要使用双反斜杠使字符文字包含单个反斜杠:

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");

答案 1 :(得分:0)

在字符串或字符常量中,\字符用作转义字符,以赋予以下字符特殊的含义。在您的情况下,\会转义结束的'字符,这意味着引号字符常量未关闭。

文字\的转义序列为\\。所以你想要的是:

if(c=='\\')