2014-03-31 1 views
1

저는 C 프로그래밍을 처음 접했고 간단한 문제가 생겼습니다. 나는이 사이트의 모든 부분을 보았지만 이에 대한 해답을 찾고있다. 입력 파일의 끝에 공백이 있으면 프로그램이 제대로 실행됩니다. | 유닉스코드가 선행 공백으로 올바르게 인쇄됩니다.

./program-name < file.txt를

에 명령 줄에서 프로그램을 실행 예를 들어, file.txt를이 아 파크 공백으로 // 경우 | 공간이다. 고양이 란. | | 이 고양이의 란 경우
나는 올바른 출력 1 1 1

를 얻을. 어떤 도움에 감사드립니다

//I have to use C for this program. 
#include <stdio.h> 

int main(void){ 
    int i=0; 
    char c; 
    int NOV=0; 

     while((c=getchar())!=EOF && c !='\n' && c !=10){ 

     if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'){ 
      NOV++; 
     } 
     if(c==' '){ 
      printf("%d ",NOV); 
      NOV=0; 
     } 
    } 
    printf("\n"); 
    return 0; 
} 

(공백없이 내가 한 일을 얻을).

+0

이 프로그램은 출력 파일에서 읽을 수있는 모든 공간에 NOV''의 값을 보인다. 'NOV'는 시작 단어마다 모음의 수를 세는 것으로 보입니다. 예상되는 결과는 무엇입니까? 마지막 단어에 삽의 숫자를 공백으로 끝내지 않으려면 루프 다음에'(c == '')'에 대한 명령문을 실행하거나 다른 단어를 사용해야합니다 고리. – Codor

+1

코드를 올바르게 포맷하면 오류를 찾는 데 도움이됩니다. –

+0

@codor : 'wovels'? 소설 (또는 나는 보넬을 의미합니까?). –

답변

4

공간이없는 EOF를 얻으면 루프를 종료하고 루프가 모음 수를 인쇄 한 후에 아무 것도 문제가되지 않습니다.

아마도 루프 다음에 if (NOV != 0) printf("%d", NOV);을 추가하십시오.

별도로 10을 사용하면 이상합니다. '\ n'은 컨트롤 -J 또는 10입니다. 컨트롤 -M, 캐리지 리턴 또는 '\r'을 생각할 수도 있습니다. 블루 픽시는 코멘트에 지적

또한, 당신은 항상 getchar() 또는 fgetc()getc()의 반환을받을 수 int c;를 사용해야합니다. 함수는 int을 반환하며 unsigned char 또는 음수 값인 EOF에 맞는 값이 될 수 있습니다. 대신 char c을 사용하면 문제가 발생합니다. 다음과 같이 읽어야

+0

고마워요. 나는 선생님이 줄의 끝을위한 것이라고 나에게 이상한 것처럼 보였기 때문에 나는 10을 사용하고 있었다. – bp01442

0

여러분의 프로그램 (쓸모없는 혼란을 많이 제거 된) : 표시

int main(void) 
{ 
    int c; 
    int nov = 0; 

    while((c = getchar()) != EOF && c != '\n') 
    { 
    if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') 
     nov++; 
    } 

    printf("%d\n", nov) ; 

    return 0; 
} 
관련 문제