C编程语言,第1章练习1.10(Getchar和Putchar)

use*_*236 7 c putchar getchar

我已经在这个工作了2个小时而且我被卡住了...我在网上找到了答案,但这不会帮助我学习我显然缺少的概念.

提示:编写程序将其输入复制到其输出,替换每个选项卡\t,每个退格键\b和每个反斜杠\\.这使得标签和退格以明确的方式可见.

这是我提出的,它没有替换a tab\与指示putchar,它只是在它前面添加它.(我没有做退格,因为我无法真正输入退格...):

这就是我阅读代码的方式.我错过了什么?:

"有一些整数c.c等于输入.当输入不等于文件结束时继续.如果输入是tab然后输出\t.如果输入\则输出\\.输入输出到控制台."

int c;

while((c=getchar())!=EOF)
{
    if(c=='\t')
        {
            putchar('\\');
            putchar('t');
        }

    if(c=='\\')
        {
            putchar('\\');
            putchar('\\');
        }
    putchar(c);
}
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 8

您的主要问题是无论您是否已输出其翻译,您都在输出该字符.这些if陈述将按照您的预期进行,但就目前的形式而言,它们只是简单地进入下一个陈述.

因此,你会寻找更像这样的东西:

while ((c = getchar()) != EOF) {
    // Detect/translate special characters.

    if (c == '\t') {
        putchar ('\\');
        putchar ('t');
        continue;              // Go get next character.
    }

    if (c == '\b') {
        putchar ('\\');
        putchar ('b');
        continue;              // Go get next character.
    }

    if (c == '\\') {
        putchar ('\\');
        putchar ('\\');
        continue;              // Go get next character.
    }

    // Non-special, just echo it.

    putchar (c);
}
Run Code Online (Sandbox Code Playgroud)

另一种可能性,更简洁,更简洁:

while ((c = getchar()) != EOF) {
    // Detect/translate special characters, otherwise output as is.

    switch (c) {
        case '\t': putchar ('\\'); putchar ('t');  break;
        case '\b': putchar ('\\'); putchar ('b');  break;
        case '\\': putchar ('\\'); putchar ('\\'); break;
        default:   putchar (c);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 或者代替那么多`continue`你也可以使用`else if`而不是`if` (3认同)