【问题标题】:Why won't this C program pick up escaped backslashes?为什么这个 C 程序不会选择转义的反斜杠?
【发布时间】:2015-01-23 19:22:04
【问题描述】:

我正在做 K&R 的练习 1-10

编写一个程序将其输入复制到其输出,将每个制表符替换为\t,将每个退格替换为\b,并将每个反斜杠替换为\\。这使得制表符和退格键以明确的方式可见。

我想出了这个......

#include <stdio.h>

int main () {

    int c;
    printf("\n"); // For readability

    while ((c = getchar()) != EOF) {

        switch (c) {
            case '\t':
                printf("\\t");
                break;
            case '\b':
                printf("\\b");
            case '\\':
                printf("\\");
                break;
            default:
                printf("%c", c);
                break;
        }

    }

}

出于某种原因,它拒绝触摸反斜杠。例如,当输入Hello how\ are you? 之类的字符串时,程序的输出是Hello\thow\ are you?,这意味着它转换了tab OK,但不是反斜杠。

我做错了吗?

【问题讨论】:

  • 我们可以至少提供一下先问是否是家庭作业的礼貌吗?有很多人被告知他们的问题是家庭作业,但他们回答说这是自我教育。如果我们确定但不是未经确认,我完全赞成标记它们。而且,如果有人对此撒谎,强硬!当他们交出作业时,他们会失败,因为任何不监控这些网站是否存在抄袭的教育工作者都不应该在教育。
  • 每个教育工作者在评分前每次设置问题时都必须检查互联网是否存在问题?我是在云白痴之地醒来的吗?也许他们只是将每个学生答案的每一行都粘贴到谷歌中。这可能行得通。

标签: c kernighan-and-ritchie


【解决方案1】:

您可能想要printf("\\\\");,而不仅仅是printf("\\");

【讨论】:

  • @Aaron:我只希望 15K 代表的 SO 用户知道将问题标记为作业。
  • 不是家庭作业的解决方案。这是我们可以提供帮助的一个小细节,因为 OP 已经完成了大部分工作。除非作业是“为什么这个 C 程序不会选择转义的反斜杠?”在这种情况下,我担心未来的 IT 行业 :-) 最重要的是,HW 标签是由其他人添加的。
  • 啊,是的,我只是想了一下,然后意识到打印 2 `\` 需要我同时逃避它们。哎呀! – 亚历克斯 1 小时前
【解决方案2】:

你应该打印反斜杠它的转义。

目前您只是打印反斜杠 - 在这里您要转义第二个反斜杠,否则会转义结束双引号:

printf("\\");

【讨论】:

    【解决方案3】:

    使用printf("\\\\")

    【讨论】:

    • 在这种情况下,即使是家庭作业也没关系 - 他粘贴了工作代码并表明他自己努力解决了问题。
    【解决方案4】:

    当 C 编译器在源代码中找到 \\ 时会做什么?

    【讨论】:

    • 提示:不要对非家庭作业含糊其辞 :-) {只是一个微妙的刺戳,请不要生气}。
    猜你喜欢
    • 2020-11-30
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2012-03-10
    相关资源
    最近更新 更多