【问题标题】:How to print "\" on C如何在 C 上打印“\”
【发布时间】:2018-11-01 11:57:21
【问题描述】:

我正在尝试将符号“\”保存在一个字符中,然后打印它,但我不能。

有什么好主意吗?

char direction = '\';
printf("%c", direction);

【问题讨论】:

标签: c


【解决方案1】:

逃脱它。

char direction = '\\';

【讨论】:

    【解决方案2】:

    你可以这样直接打印:

    printf("\\");
    

    用于打印任何特殊字符。

    \\ - Backslash
    \' - Single Quotation Mark
    \" - Double Quotation Mark
    \? - Question Mark
    \n - New line
    \r - Carriage Return
    \t - Horizontal Tab
    \b - Backspace
    \f - Formfeed
    \a - Bell (beep sound)
    \v - Vertical Tab
    

    参考:https://stackoverflow.com/a/11792217/5747242

    C11 §6.4.4.4 Character constants§5.2.2 Character display semantics 也有帮助。

    【讨论】:

    • 我永远不记得 \a 是否受到普遍支持或者是一个选项。另请注意,\? 是可选的,? 需要转义三元组。
    • 警报 ('\a') 从一开始就是标准 C,@Bathsheba。它与\v 争夺“最不有用的转义序列”奖杯。
    • @JonathanLeffler 和\? 太确定了吗?从现在开始,我将努力记住 \a 是标准的。
    • @Bathsheba:\? 之所以有目的是因为三元组——大多数人和许多编译器都忽略了它。例如,如果你写printf("What??!\n");,如果你的编译器注意到三元组,你应该在输出上看到What|——如果没有,你应该看到What??!。 GCC 要求-trigraphs 关注它们。标准说它应该一直发生。我相信 C++ 最终说“不再有三元组”。为了得到我想要的序列,在标准 C(带三元组)中,我会写 printf("What\?\?!\n"); — 尽管只有两个 \? 序列中的一个就足够了。
    • @Bathsheba: C11 §5.1.1.2 Translation phases: 在第 1 步中添加换行符时删除三元组 — 以便可以在第 2 步等中继续进行反斜杠换行处理。
    【解决方案3】:

    你必须使用'\\'。反斜杠是转义字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多