2013-06-14 4 views
1

나는 여기에서 새롭다, 적어도 질문한다. 항상 좋은 답변을 찾을 수있었습니다. 프로그래밍과 재 학습 C로 돌아 가려고했지만 이상한 문제가 발생했습니다.간단한 C 프로그램, 인쇄하지 않음

#include <stdio.h> 

main() 
{ 
    long nc; 
    nc = 0; 
    while (getchar() != EOF) 
    ++nc; 
    printf("%ld \n", nc); 
} 

문자를 입력하고 Enter 키를 누르면 nc 값이 인쇄되지 않습니다. enter를 치면 다시 잘 타이핑 할 수 있습니다. 정말로 잘못 될 수있는 것을 실제로 볼 수는 없습니다. 그것을 작동시키는 유일한 방법은 대괄호 안에 ++ nc와 printf를 둘 다 넣는 것입니다. 그런 다음 Enter 키를 누르면 1-to-nc 값이 부여됩니다. 이는 원하는 것이 아닙니다. 나는 NC를 원한다. 말할 필요도없이 유형도 문제가 아닙니다. 미리 감사드립니다.

+0

당신이 EOF가 입력과 아무 상관이 있다고 생각 하죠? – Jens

+0

EOF를 얻으려면 어떻게해야합니까? Control을 누르면 D가^D 만 제공합니다. 어떤 것도하지 않습니다 – hops1

+0

어떤 OS를 사용하고 있습니까? ENTER를 누른 후 Control-D는 EOF로 작동합니까? – Jens

답변

7

EOF을 보낼 단말기에 Ctrl-D을 입력하십시오. 입력란으로 작업하려면 대신

while (getchar() != '\n') 

을 입력하십시오.

+1

getchar이 EOF를 반환하면 무한 루프가됩니다. – Jens

+0

@Jens 그가 EOF 대신 Enter 키를 눌러 작동하게하려면 말하고 있다는 것을 압니다. –

+0

그러나이 버그를 수정하고 실제 입력을 처리하는 프로그램이 얼마나 힘든지? * 항상 EOF가 있습니다 *? – Jens

3

EOF를 받으려면 Ctrl-D를 눌러야합니다.

+0

컨트롤 d는 나에게 줄 것 같다^D – hops1

+0

다른 해결책을 찾았지만^D pls를 설명 할 수 감사합니다 – hops1

+0

내 시스템에서 Ctrl-Z를 알아 냈습니다 – hops1

1

동안 시도 (getchar가() = '\ n을'!) NC++;

편집 : 콘솔에서 가져온 입력을 가정하면 '\ n'이면 충분합니다. 그냥 루프 안에 인쇄 NC를 얻고 싶다면

+0

감사합니다 Ajax, – hops1

+1

그건 무한 루프입니다 getchar가 EOF를 돌려주는 경우 – Jens

+0

@Jens : 콘솔에서 수동으로 입력을하고 있기 때문에 enter 키를 눌러 프로그램을 중지 할 수 있습니다. – Ajax

0

, 당신과 같이 루프에서 인쇄 문을 포함해야한다 :

#include <stdio.h> 

main() 
{ 
    long nc; 
    nc = 0; 
    while (getchar() != EOF) { 
    ++nc; 
    printf("%ld \n", nc); 
    } 
} 

인쇄 한 번 타격 후 각 문자에 대해, 아마 [입력] NC 그건 당신이 원하는.

당신이 NC 번 줄에 사용 scanf와 인쇄 싶어 할 경우

#include <stdio.h> 
#include <string.h> 

main() 
{ 
    long nc; 
    nc = 0; 
    char buf[128]; 
    while (scanf("%s",&buf) > 0) { 
     int len = strlen(buf); 
     nc += len; 
     printf("%ld \n", nc); 
    } 
}