第二个c = getchar()'是否有任何原因?在这个代码示例中提到?
#include <stdio.h>
/* copy input to output; 1st version */
int main(void) {
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar(); // <-- I mean this one.
}
return 0;
}
答案 0 :(得分:3)
c = getchar(); //read for the first time before entering while loop
while (c != EOF) {
putchar(c);
c = getchar(); // read the next input and go back to condition checking
}
return 0;
getchar()
读取第一次输入字符。getchar()
继续阅读下一个输入,直到EOF
换句话说,while (c != EOF)
的目的是继续检查c
是否为EOF
。如果c
未更改,则while()
循环无意义,不是吗?第二个getch()
负责在每次迭代中对c
的值进行处理。
答案 1 :(得分:1)
它读取第一个字符,检查它不是EOF,然后putChars,然后获取另一个char,返回到while循环的顶部并检查它不是EOF。
答案 2 :(得分:1)
第二个c = getchar()
是读取另一个字符,而另一个字符是EOF
。
答案 3 :(得分:0)
第一个c = getchar();
只能使用一次,但c = getchar();
内部while循环每次都会有效,直到c != EOF
。
c = getchar(); // Read value of `c` if `c != EOF` it will enter while loop else it will exit
while (c != EOF) { // checking condition
putchar(c); //printing value of c
c = getchar(); // again getting new value of c and checking in while loop,
//if condition is true it will continue, else it will exit
}
答案 4 :(得分:0)
它就在那里因为一个while循环测试在顶部,但你真的需要在中间进行测试。在循环上方及其内部复制代码的替代方法是使用break
。
while (1) {
c = getchar();
if (c == EOF) break; /* test in middle */
putchar(c);
}
答案 5 :(得分:0)
这是我的疏忽。我在终端运行这个版本的代码:
while((c = getchar()), c != EOF) {
putchar(c);
}
并且看不出结果之间的区别。愚蠢的情况。 无论如何,感谢所有人。