簡體   English   中英

Kernighan&Ritchie代碼示例混淆

[英]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;
  1. first getchar()讀取第一次輸入字符。
  2. 第二個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM