2014-02-21 9 views
-1
#include <stdio.h> 
#ifndef EOF 
#define EOF (-1) 
#endif 

int main(void) 
{ 
    int nb, nl, nt, c; 
    nb = 0; 
    nl = 0; 
    nt = 0; 
    while ((c = getchar()) != EOF){ 
     if (c == ' ') 
      ++nb; 
     else if (c == '\n') 
      ++nl; 
     else if (c == '\t') 
      ++nt; 
    } 
    printf("Input has %d blanks, %d tabs, and %d newlines\n", nb, nt, nl); 
    return 0; 
} 

이 코드가 작동하지 않는 이유는 무엇입니까?우분투의 getchar()에 대한 EOF 루프가 작동하지 않습니다. 11.10

이 코드를 내 우분투 11.10에 컴파일했습니다. EOF\n으로 바꾸면 예상대로 작동하지만 EOF에서는 작동하지 않습니다.

+1

* EOF *로 작업하지 않는다는 것은 무엇을 의미합니까? –

+1

들여 쓰기, 제발? – hivert

+0

빈칸, 탭 및 줄 바꿈의 수는 루프가 계속되는 것처럼 나오지 않습니다. 중지하는 방법 – Mux

답변

0

"작동하지 않는다"는 것은 무엇을 의미합니까? 첫째 EOF을 다시 정의하지

...

둘째 눌러 Ctrl+D 응용 프로그램을 종료합니다. 그것은 나를 위해 작동합니다 :

[email protected]:~/tmp$ ./a.out 
a 
s 
f <Ctrl+D> 
Input has 0 blanks, 0 tabs, and 3 newlines 
+0

이 바로 가기가 작동합니다. – Mux

0

코드는 정상적으로 작동합니다.

터미널 입력에서 EOF을 얻으려면 라인 시작 부분에 Ctrl-D을 입력해야합니다.

$ ./program
안녕하세요!
Ctrl 키 D

이제 프로그램 EOF를 수신하고 while 루프를 종료한다.

+0

바로 가기가 작동합니다. – Mux

1

EOFstdio.h 헤더 파일에 정의 된 매크로입니다. End-of-file의 약자로, 더 이상 입력 스트림에서 데이터를 읽을 수없는 상태를 표시합니다. 매크로를 다시 정의하면 안됩니다. 모든 문자 ch에 대해 ch == EOF이라는 표현식은 항상 false으로 평가되는 값입니다. * nix 시스템에서는 Ctrl + D 키를 눌러이 값을 입력합니다. Windows 시스템의 경우 Ctrl+ZEOF입니다.