2012-01-01 3 views
9

오늘은 입력 한 문자를 계산하기 위해 getchar()을 사용하는 간단한 코드를 작성했습니다. Cygwin에서 컴파일하면 작동하지 않습니다. 항상 0을 인쇄하지만 아무 것도 입력하지 않거나 0을 인쇄하는 문자를 입력 할 수 없습니다.왜 getchar()이 제대로 작동하지 않습니까?

그러나 VC++ 6.0으로 컴파일하면 작동합니다.

#include<stdio.h> 
int main(void) 
{ 
long nc; 

nc = 0; 
while(getchar() != EOF) 
    ++nc; 
printf("The total of characters you inputed is %ld.\n", nc); 
return 0; 
} 
+1

cygwin에서 컴파일 할 때 무엇을 사용하고 있습니까? Cygwin을 가지고 있고 VC를 사용하여 컴파일하면 잘 작동합니다. – hmjd

+3

정확한 코드가 Cygwin에서 완벽하게 작동합니다 (GCC로 컴파일). EOF를 보내려면 Ctrl-D를 눌러야합니다. –

+1

* 정확히 * 프로그램을 실행하고 있습니까? 'echo hello |를 실행하면 어떻게됩니까? ./your_program'을 Cygwin bash 쉘 프롬프트에서 찾으시겠습니까? './your_program','hello', Enter를 입력 한 다음 Control-D를 입력하면 어떻게 될까요? –

답변

0

This email thread 많은 당신처럼 들리는 버그에 대해 이야기하지만, 나는 그것을 어떤 후속 조치가 있음을 볼 수 없습니다.

난 당신이

while(getc(stdin) != EOF)

하려고 할 때 무슨 일이 있었는지 알고 관심과 문제가 해결되지 않을 경우, this 페이지 불구하고, while(fgetc(stdin) != EOF)

는 그들 모두가 작동합니다 시도 할 것이다 이 기능들 간에는 구현상의 차이가있을 수 있음을 시사합니다.

당신이 시도 할 수있는 또 다른 것은 당신이 무엇을 얻을의 ASCII 값을 인쇄하는 것입니다 : 또한

printf("%d\n",(int)getchar());

는 콘솔에를 입력하는 대신 파일에서 배관 출력을하려고합니다.

cat input.txt | ./program

편집, 파일 input.txt을 만들고 거기에 일부 문자를 넣어 할 : 당신은 고양이를 실행하고 배관 쓰기가 작동합니다. Cygwin 버전을 업데이트하면됩니다. 버그가 발생했습니다. Cygwin 및 컴파일러의 최신 버전을 구하십시오. 또 다른 옵션은 scanf입니다.

+0

while (getc (stdin)! = EOF) 및 wihle (fgetc (stdin)! = EOF)도 작동하지 않습니다. 그리고 "printf ("% d \ n ", (int) getchar());" '-1'을 인쇄합니다. 그러나 고양이에 관한 골치 거리입니다. input.txt | ./a. 잘 돌아갑니다. 그러나 나는 그것을 이해할 수 없다. 왜 잘 돌아갈 수 있는가. – yunfeng

+0

도구를 업데이트하십시오. :) 또한, Cygwin 셸 대신 cmd.exe를 사용하여 프로그램을 실행 해보십시오. 그게 효과가 있니? –

+0

My Cygwin은 [link] (http://www.cygwin.com/)이므로 최신 버전이라고 생각하지만 cmd.exe를 사용하여 it.It을 실행하면 올바르게 작동합니다. – yunfeng

관련 문제