【问题标题】:why "%c%c",92,110 in printf("%c%c",92,110) doesn't acts as escape sequence?为什么 printf("%c%c",92,110) 中的 "%c%c",92,110 不能作为转义序列?
【发布时间】:2017-05-18 05:59:12
【问题描述】:
#include<stdio.h>
#include<conio.h>
void main(){
printf("Hello%c%cWorld",92,110);/*92 is ASCII value of \ and 110 is ASCII value of n*/
getch();
}

上述程序的输出是Hello\nWorld。

【问题讨论】:

  • 你打印\,然后你打印n。这是怎么回事?
  • \n 不作为转义序列
  • 所以你知道,@CJKoirala,是 C 预处理器 cpp 将 \n 转换为换行符。 printf 和 C 编译器通常对 \n 或其他序列一无所知。

标签: c char escaping ascii


【解决方案1】:

转义序列的解释发生在翻译阶段,而在您的代码中,序列仅在运行时出现

此外,换行符\n 不是两个单独的char 文字\n组合,它是一个单独的值,表示为ny \n

ASCII table,换行符的ASCII值为10。

【讨论】:

    【解决方案2】:

    '\n' 转义序列由 C 编译器解释并更改为换行符。这并不意味着 '\n' 序列会自动转换为换行符。必须有某种东西来解释它。

    比较一下:

    #include <stdio.h>
    int main(){
      printf("Hello%c%cWorld",92,110);
    }
    

    哪个输出Hello\nWorld(字面意思)

    有了这个:

    #include <stdio.h>
    int main(){
      printf("Hello%cWorld",10);
    }
    

    哪些输出

    Hello World

    使用实际的换行符(八进制的\012,十进制的10,或十六进制的0x0a

    【讨论】:

      【解决方案3】:

      \n 的 ASCII 是 10 而不是 '\' 加 'n' 试试下面的代码,你可以得到你想要的:

      #include<stdio.h>
      #include<conio.h>
      void main(){
          printf("Hello%cWorld\n",10);
          printf("\\nis%d",'\n');
          getch();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 2022-12-18
        • 2019-11-12
        • 2018-10-12
        • 2014-02-04
        相关资源
        最近更新 更多