我正在尝试使用以下代码将转义字符打印为字符或字符串:
while((c = fgetc(fp))!= EOF)
{
if(c == '\0')
{
printf(" \0");
}
else if(c == '\a')
{
printf(" \a");
}
else if(c == '\b')
{
printf(" \b");
}
else if(c == '\f')
{
printf(" \f");
}
else if(c == '\n')
{
printf(" \n");
}
else if(c == '\r')
{
printf(" \r");
}
else if(c == '\t')
{
printf(" \t");
}
else if(c == '\v')
{
printf(" \v");
}
}
但是当我尝试它时,它实际上会打印转义序列。
答案 0 :(得分:11)
转义斜杠(使用" \\a"
),这样就不会特别解释它们。此外,您可能希望至少使用查找表或switch
。
switch (c) {
case '\0':
printf(" \\0");
break;
case '\a':
printf(" \\a");
break;
/* And so on. */
}
答案 1 :(得分:5)
字符串文字中的反斜杠需要转义;而不是"\0"
,您需要"\\0"
。
查找表可能会减少痛苦:
const char *ecs[256] = {NULL}; // assumes ASCII - may not be a valid assumption
int c;
ecs['\0'] = "\\0";
ecs['\a'] = "\\a";
ecs['\b'] = "\\b";
...
while ((c = fgetc(fp)) != EOF)
{
if (ecs[c] == NULL)
printf("%c", c);
else
printf("%s", ecs[c]);
}
是的,ecs
中的大部分条目都是NULL;权衡是我不必担心将字符值映射到数组索引。
答案 2 :(得分:3)
为此,我们需要使用双反斜杠。
示例:
if(c == '\0')
{
printf(" \\0");
}
else if(c == '\a')
{
printf(" \\a");
}
else if(c == '\b')
{
printf(" \\b");
}
else if(c == '\f')
{
printf(" \\f");
}
else if(c == '\n')
{
printf(" \\n");
}
else if(c == '\r')
{
printf(" \\r");
}
else if(c == '\t')
{
printf(" \\t");
}
else if(c == '\v')
{
printf(" \\v");
}
应该适合你!
答案 3 :(得分:0)
如果您想在%d
内逃离printf
,以便让您实际打印字符"%d":
printf("%%d");