我已经为此工作了 2 个小时,但我被困住了......我在网上找到了答案,但这并不能帮助我学习我显然缺少的概念。
Prompt:编写一个程序将其输入复制到输出,将每个选项卡替换为\t
,每个退格键\b
,以及每个反斜杠\\
。这使得制表符和退格键以明确的方式可见。
这是我想出的,它并不能取代tab
or \
与指示的putchar
,它只是将其添加到它的前面。(我没有执行退格键,因为我无法真正输入退格键......):
这就是我阅读代码的方式。我缺少什么?:
“有一些整数c
. c
等于输入。当输入不等于文件末尾时继续。如果输入是制表符则输出\t
。如果输入是\
然后输出\\
。将输入输出到控制台。”
int c;
while((c=getchar())!=EOF)
{
if(c=='\t')
{
putchar('\\');
putchar('t');
}
if(c=='\\')
{
putchar('\\');
putchar('\\');
}
putchar(c);
}
您的主要问题是您正在输出字符,而不管您可能已经输出了其翻译。那些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);
}
另一种更短、更简洁的可能性是:
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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)