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

无法通过getchar()将包含ASCII值的整数变量与'\t''\';;,c,C,我正在用c语言编写一个带有自定义输入的代码。以及在比较int变量与“\”、“\t”(通常是转义序列)时遇到问题。整型变量存储字符的ASCII值。并通过getchar()获取 我曾经尝试过更改编译器,也尝试过使用scanf()并将值存储在另一个级别。但对于每一个进程,将“\”视为不同的字符,将“t”视为不同的字符。甚至不能比较“\”。显示缺少的终止字符 #include <stdio.h> int main() { int c; while((c=getchar())

我正在用c语言编写一个带有自定义输入的代码。以及在比较int变量与“\”、“\t”(通常是转义序列)时遇到问题。整型变量存储字符的ASCII值。并通过
getchar()
获取

我曾经尝试过更改编译器,也尝试过使用
scanf()
并将值存储在另一个级别。但对于每一个进程,将“\”视为不同的字符,将“t”视为不同的字符。甚至不能比较“\”。显示缺少的终止字符

#include <stdio.h>

int main()
{
    int c;
    while((c=getchar())!=EOF)
    {
        if(c=='\')
            printf('x');
    }
    return 0;
}
#包括
int main()
{
INTC;
而((c=getchar())!=EOF)
{
如果(c=='\')
printf('x');
}
返回0;
}

如果
c='\'
,我想打印x。真正的代码有点太长了。我确信其他部分没有错误,但无法获取此信息。我在网上看到的每一个代码都在工作。但我的不是。

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

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')至打印F(“x”)

在字符串或字符常量中,
\
字符充当转义字符,赋予以下字符特殊含义。在您的例子中,
\
正在转义结束的
'
字符,这意味着引用的字符常量未结束

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

if(c=='\\')

要与\字符进行比较,只需使用转义序列
'\\'
。正如初级C语言书《字符串》一章中所演示的那样,
\t
不会产生转义序列,但制表符。旁注(在中寻址):
printf
将字符串文本作为格式字符串,而不是字符文本。即使您通过修复“\”字面值来编译它,并且您抑制了编译器传递
'x'
时发出的所有警告,它几乎肯定会发生segfault(或者更糟糕的是,根据添加到
'x'
的堆栈垃圾以静默方式打印随机内存)。您需要
printf(“x”),而不是
printf('x')。非常感谢。非常感谢您的时间和知识。再次感谢您。谢谢您。兄弟。我尝试过不同的比较方式,但只是因为我无法比较“\”。我被卡住了。现在刚刚开户。还有这么多很棒的人。几分钟内,帮助就到了。谢谢