我正在用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。真正的代码有点长。我相信其他部分都没有错误,但无法得到。我在网上看到的每个代码都有效。但不是我的。
答案 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=='\\')