我已经在这个工作了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)
您的主要问题是无论您是否已输出其翻译,您都在输出该字符.这些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)
| 归档时间: |
|
| 查看次数: |
3260 次 |
| 最近记录: |