[英]Can anyone explain the solution of this memoization/dynamic programming prob/puzzle?
[英]C programming, Can anyone explain this?
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
if (c == '\t')
printf("\\t");
else if (c == '\b')
printf("\\b");
else if (c == '\\')
printf("\\\\");
else
putchar(c);
}
return 0;
}
在这种情况下,输入
hi how are you\\doing
我得到一个输出
hi\\thow\\tare\\tyou\\\\doing
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
if (c == '\t') {
c = '\b';
printf("\\t");
}
if (c == '\b') {
c = '\b';
printf("\\b");
}
if (c == '\\') {
c = '\b';
printf("\\\\");
}
putchar(c);
}
return 0;
}
当我用输入运行该程序时
hi how are you\doing
(大空格是制表符)
我得到这个输出
hi\t\how\t\are\t\you\doing
码:
#include <stdio.h>
int main() {
int c;
c = '\b';
putchar(c);
return 0;
}
运行时,我什么也没得到。 无输出。 回到shell提示符。
更准确地说,在第一个程序中,我得到了想要的输出,但是在第二个程序中,我在每个\\t
之后都得到了反斜杠,但在\\之后却没有得到反斜杠\\
我希望\\\\\\
是观察\\t
变为的输出。 \\t\\
,是由'\\ b'引起的吗? 如果是,它如何工作? 但是如果是这样,为什么在第三程序中不会发生同样的事情?
在用于Windows的rasbian默认gcc编译器和mingw msys-gcc程序包上运行该程序。
第二个程序采用这种方式的原因是因为您输入了多个if
块:
if (c == '\t') {
c = '\b';
printf("\\t");
}
if (c == '\b') {
c = '\b';
printf("\\b");
}
if (c == '\\') {
c = '\b';
printf("\\\\");
}
putchar(c);
遇到选项卡时,将输入第一个块,并在其中将\\t
打印到屏幕上,然后将c
更改为backspace 。
然后输入第二个块,因为c
是一个退格键(因为您刚刚将其更改为那个)。 然后,该块将\\b
打印到屏幕上,因此现在您在屏幕上显示\\t\\b
。
然后,当您调用putchar
写入退格键时, b
将被下一个字符覆盖。 因此,在写入下一个字符时,屏幕上将显示\\t\\
。
因此,这里的问题是您要多次测试c
并可能在两次之间进行更改。 仅在选项卡上发生这种情况的原因是,您先检查选项卡,然后再检查退格键,然后再检查反斜杠。
如果使用else if
代替if
,则不会输入多个块:
if (c == '\t') {
c = '\b';
printf("\\t");
}
else if (c == '\b') {
c = '\b';
printf("\\b");
}
else if (c == '\\') {
c = '\b';
printf("\\\\");
}
putchar(c);
进行此更改后,给定原始输入,输出将是:
hi\how\are\you\doing
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.