2014-12-01 5 views
0

이 코드 예제에서 두 번째 'c = getchar()'언급의 이유가 있습니까? Kernighan & Ritchie 코드 예제 혼동

#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; 
} 
+1

각 반복마다 char을 읽고 놓는 while 루프는 '두 번째'getchar없이 어떻게 작동할까요? –

+0

@OlegMikheev, 그건 내 부주의 다. 나는이 버전의 코드를 터미널에서 실행하고 있었다 : while ((c = getchar()), c! = EOF) { putchar (c); } 결과 간의 차이를 확인할 수 없습니다. 어리석은 상황. –

답변

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; 
  1. getchar() 처음 입력 문자를 판독한다.
  2. getchar() 환언에서는 EOF

전까지, 다음 입력 (들)을 읽고 유지 while (c != EOF)의 목적은 cEOF 여부 확인을 계속한다. c이 변경되지 않으면 while() 루프가 의미가 없습니까? 아닙니다. 두 번째 getch()은 각 반복에서 c의 값을 변경합니다.

+0

그건 내 잘못이야. 나는이 코드 버전을 터미널에서 실행했다 : while ((c = getchar()), c! = EOF) {putchar (c);} 그리고 차이점을 볼 수 없었다. 어리석은 상황. –

1

예, 그렇기 때문에 putchar EOF가 없습니다.

첫 번째 문자를 읽고 EOF가 아니고 putChars를 확인한 다음 다른 char을 while 루프의 맨 위로 가져 와서 EOF가 아닌지 확인합니다.

1

두 번째 c = getchar()EOF이 충족 될 때까지 다른 문자와 아직 다른 문자를 읽는 것입니다.

0

첫 번째 c = getchar();은 한 번만 작동하지만 내면 c = getchar(); 루프는 매회 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 
} 
0

while 루프는 상단에서 테스트하기 때문에 중간에 테스트가 필요합니다. 루프 위 및 내부에 코드를 복제하는 대신 break을 사용합니다.

while (1) { 
    c = getchar(); 
    if (c == EOF) break; /* test in middle */ 
    putchar(c); 
} 
0

그건 내 잘못입니다. 나는 터미널에서 코드의 버전 실행중인 :

while((c = getchar()), c != EOF) { 
putchar(c); 
} 

및 결과의 차이를 볼 수 없었다. 어리석은 상황. 감사합니다.