[英]Kernighan & Ritchie code example confusion
在此代碼示例中是否有第二個提到“ 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;
}
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
的值。
是的,所以它不會putchar EOF。
它讀取第一個字符,檢查其不是EOF,然后將其放置在char上,然后獲取另一個char,返回while循環的頂部並檢查其不是EOF。
第二個c = getchar()
將讀取另一個char,然后讀取另一個char直到滿足EOF
。
第一個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
}
在那里是因為while循環測試在頂部,但是您真的需要在中間進行測試。 除了在循環上方和內部復制代碼外,還可以使用break
。
while (1) {
c = getchar();
if (c == EOF) break; /* test in middle */
putchar(c);
}
那是我的疏忽。 我正在終端中運行以下版本的代碼:
while((c = getchar()), c != EOF) {
putchar(c);
}
並且看不到結果之間的差異。 愚蠢的情況。 仍然感謝所有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.