【问题标题】:How do i print escape characters as characters?如何将转义字符打印为字符?
【发布时间】:2011-10-04 19:49:45
【问题描述】:

我正在尝试使用此代码将转义字符打印为字符或字符串:

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

但是当我尝试它时,它实际上会打印转义序列。

【问题讨论】:

    标签: c fgetc ansi-escape


    【解决方案1】:

    为此,我们需要使用双反斜杠。

    例子:

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

    应该为你工作!

    【讨论】:

      【解决方案2】:

      如果您想在printf 中转义%d 以允许您实际打印字符“%d”:

      printf("%%d"); 
      

      【讨论】:

        【解决方案3】:

        字符串文字中的反斜杠需要转义;你需要"\\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;权衡是我不必担心将字符值映射到数组索引。

        【讨论】:

          【解决方案4】:

          转义斜线(使用" \\a"),这样它们就不会被特别解释。此外,您可能希望至少使用查找表或switch

          switch (c) {
          case '\0':
              printf("   \\0");
              break;
          case '\a':
              printf("   \\a");
              break;
          /* And so on. */
          }
          

          【讨论】:

          • 你不是说printf(" \\0");等吗?
          猜你喜欢
          • 2023-04-10
          • 2016-04-27
          • 1970-01-01
          • 2011-12-14
          • 2016-07-20
          • 2019-06-18
          • 2017-04-14
          相关资源
          最近更新 更多