2015-02-06 5 views
1
단말

에 아무것도 인쇄 I 입력 된 단어의 길이 우리 수직 히스토그램을 인쇄해야 다음 C 프로그램을 갖는다.C 프로그램

#include <stdio.h> 

#define MAX_WORD_LENGTH  35  /* maximum word length we will support */ 

int main(void) 
{ 
int i, j;      /* counters */ 
int c;      /* current character in input */ 
int length;     /* length of the current word */ 
int lengths[MAX_WORD_LENGTH]; /* one for each possible histogram bar */ 
int overlong_words;   /* number of words that were too long */ 

for (i = 0; i < MAX_WORD_LENGTH; ++i) 
    lengths[i] = 0; 
overlong_words = 0; 

while((c = getchar()) != EOF) 
    if (c == ' ' || c == '\t' || c == '\n') 
     while ((c = getchar()) && c == ' ' || c == '\t' || c == '\n') 
      ; 
    else { 
     length = 1; 
     while ((c = getchar()) && c != ' ' && c != '\t' && c != '\n') 
      ++length; 
     if (length < MAX_WORD_LENGTH) 
      ++lengths[length]; 
     else 
      ++overlong_words; 
    } 

printf("Histogram by Word Lengths\n"); 
printf("=========================\n"); 
for (i = 0; i < MAX_WORD_LENGTH; ++i) { 
    if (lengths[i] != 0) { 
     printf("%2d ", i); 
     for (j = 0; j < lengths[i]; ++j) 
       putchar('#'); 
      putchar('\n'); 
     } 
    } 
} 

나는이 내가 ./a.out 할 터미널에서 나는 단어를 입력하고 아무 일도 발생하지 않습니다, a.out의로 집계했다. 어떤 도움이 필요합니까? 나는 C에 익숙하지 않고 배우려고 노력하고 있습니다.

+2

들여 쓰기로 코드의 형식을 올바르게 지정하고 큰일체에 중괄호를 넣으십시오. 나는이 코드를 전혀 따라갈 수 없다. –

답변

3

여러분의 프로그램은 getchar() 반환 EOF 때까지 아무것도 출력하지 않습니다. 즉 단어를 입력하고 수익을 올리는 것은 의미가 없습니다. 빈 행에 ^D을 눌러 터미널 에뮬레이터에 입력 스트림을 닫을 것을 지시해야합니다.

빠른 테스트는 여기에 프로그램이 작동하는지 보여줄 것으로 보인다. 당신은 당신의 큰 &&/|| 논리 연산 순서에 확인 할 수 있습니다 - 그 소리가 || 내에서 나에게 &&에 대한 몇 가지 경고를 주었다.

+2

Windows 터미널의 경우 'Ctrl + Z'입니다. – HolyBlackCat

0

코드에 논리 문제가 있습니다.

입력은 "A"이고 가정한다. 그러면 다음과 같이 :

EOF가 0이 아닌지 확인하지 않아 프로그램이 무한 루프를 입력합니다. 당신이 할 수있는 테스트를 위해

int in_word = 0; 
do { 
    c = getchar(); 

    if ((c == EOF) || isspace (c)) { 
     if (in_word) { 
      in_word = 0; 
      if (length < MAX_WORD_LENGTH) { 
       lengths[length]++; 
      } 
      else { 
       overlong_words++; 
      } 
     } 
    } 
    else { 
     if (!in_word) { 
      in_word = 1; 
      length = 1; 
     } 
     else { 
      length++; 
     } 
    } 
} while (c != EOF); 

:

이 대신 뭔가를 시도 그것은 프로그램에게 그것을 종료 할 필요가 EOF를 줄 것이다

$ echo -n "Lorem ipsum dolor sit amet" | ./main 

가 반복하고 할 필요를 피할 수 매번 어떤 단어를 입력하십시오.