2014-06-22 3 views
-5

나는 Kerninghan & Ritchie의 "C 프로그래밍 언어"2 판을 훑어보고 단어 길이와 문자 발생을 각각 세는 연습 문제 1-13과 1-14에 붙어 있습니다. . 지금은 테스트 중이지만 (히스토그램을 인쇄하는 방법은 모르겠지만 나중에 시도 할 수도 있습니다.) 단어 길이를 계산하면 저를 위해 작동하지 않습니다. 배열 위치를 너무 많이 늘리는 것 같지만 왜 그럴까요?단어 길이 계산 방법 (K & R 책 연습)

#include <stdio.h> 

int main(void){ 
    int array[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 
    int counter, c, position; 
    while ((c = getchar()) != EOF){ 
     if(c == ' '){ 
      counter = 0; 
     } else { 
      counter ++; 
      array[counter] += 1; 
     } 
    } 
    position = 0; 
    for (position = 0; position < 10; ++position){ 
     printf("%d", array[position]); 
    } 
    return 0; 
} 

편집 샘플 입력 : "오 TW의 THR"

샘플 출력 -을 "00000"

당신은이 같은 카운터를 초기화해야
+6

'카운터'의 초기 값은 무엇입니까? – ouah

+1

결국이 코드는 무엇을하기로되어 있습니까? 이것은 개별 문자의 발생이나 줄의 단어 길이를 계산하지 않습니다. –

+1

내가 분명히 지체 되었기 때문에 할당되지 않았습니다. 이 코드는 단어의 길이를 계산합니다. 하단의 배열 인쇄는 길이가있는 단어가 몇 번이나 인쇄되는지 나타냅니다. 다음은 몇 가지 업데이트입니다. http://ideone.com/gLgY2z – user3765259

답변

0

code을 시도해보십시오

#include <stdio.h> 

int main(void){ 
int array[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 
int counter=0, c, position; 
while ((c = getchar()) != EOF){ 
    if(c == ' ' || c == '\n' || c == '\t'){ 
     array[counter]++; 
     counter = 0; 
    } else { 
     if(counter<9) { 
      counter ++; 
     } 
    } 
} 
if(counter!=0) { 
    array[counter]++; 
} 
for (position = 0; position < 10; ++position){ 
    printf("%d ", array[position]); 
} 
    return 0; 
} 

코드의 문제는 문자가 표시 될 때마다, 당신은 배열 위치를 증가했다이었다. 필요한 것은 단어가 끝날 때까지 기다리는 것입니다. 우리가 ""직면하자마자 배열의 단어 길이를 증가시킵니다.

0

: 사용하기 전에

counter = 0; 

을 그것.