C编程,任何人都可以解释这个吗?
#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 youdoing
我得到一个输出
hithowtaretyoudoing
#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 youdoing
(大空间是标签)
我得到这个输出
hithowtaretyoudoing
码:
#include <stdio.h>
int main() {
int c;
c = 'b';
putchar(c);
return 0;
}
在运行这个,我什么也没得到。 没有输出。 回到shell提示符。
更确切地说,在第一个程序我得到我想要的输出,但在第二个方案,我得到的每一个反斜杠后t
但毕竟不是我希望
为输出正在研究如何
t
变成t
,是' b'造成的吗? 如果是,它是如何工作的? 但如果是这样,为什么第三个程序中不会发生同样的情况?
运行rasbian默认的gcc编译器和mingw msys-gcc的windows包。
第二个程序如此行事的原因是因为if
块输入了多个:
if (c == 't') {
c = 'b';
printf("t");
}
if (c == 'b') {
c = 'b';
printf("b");
}
if (c == '') {
c = 'b';
printf("\");
}
putchar(c);
当你遇到一个标签,在进入第一块地方打印t
到屏幕上,然后改变c
到退格。
然后输入第二个块,因为c
是一个退格(因为你只是改变了它)。 然后该块将b
打印到屏幕上,所以现在你在屏幕上有tb
。
当你调用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);
通过这种改变,给定原始输入,输出将是:
hihowareyoudoing
链接地址: http://www.djcxy.com/p/84413.html