2013-07-12 3 views
-2

упражнения являетсяK & R Упражнение 1-13

«Написать программу для печати гистограммы длин слов в его входе.»

Вот ответ, указанный в C Answer Book. По какой-то причине он не работает в CodeBlocks, поскольку нет ввода при вводе моего ввода. Почему это так?

Другой вопрос касается wl[i]; что это?

#include <stdio.h> 

#define MAXHIST 15 
#define MAXWORD 11 
#define IN  1 
#define OUT  0 

main() 
{ 
    int c, i, nc, state; 
    int len; 
    int maxvalue; 
    int ovflow; 
    int wl[MAXWORD]; 

    state = OUT; 
    nc = 0; 
    ovflow = 0; 
    for(i=0; i < MAXWORD; ++i) 
     wl[i] = 0; 
    while((c = getchar()) !=EOF) { 
     if (c==' '|| c=='\n'|| c == '\t'){ 
      state = OUT; 
      if (nc>0) 
       if (nc < MAXWORD) 
        ++wl[nc]; 
       else 
        ++ovflow; 

      nc=0; 
     }else if (state == OUT){ 
      state = IN; 
      nc = 1; 
     }else 
      ++nc; 
    } 
    maxvalue = 0; 
    for (i = 1; 1<MAXWORD; ++i) 
     if (wl[i] > maxvalue) 
      maxvalue = wl[i]; 

    for (i=1; i<MAXWORD; ++i){ 
     printf("%5d - %5d : ", i, wl[i]); 
     if (wl[i]> 0){ 
      if ((len=wl[i] * MAXHIST/maxvalue) <=0) 
       len = 1; 
     }else 
      len = 0; 
     while (len > 0) { 
      putchar('*'); 
      --len; 
     } 
     putchar('\n'); 
    } 
    if (ovflow > 0) 
      printf("There are %d words >= %d\n", ovflow, MAXWORD); 
} 
+0

Вы пытались скомпилировать с включенными * all * предупреждениями? – Kevin

+2

Вам действительно нужно прочитать некоторые книги на C, если вы задаете такие вопросы, как то, что является индексом массива. Вы никогда не решите свою проблему, если не поймете, что делаете. – siride

+0

Разве K & R не считается книгой на C? Спасибо за разъяснение, не знал, что это индекс массива. @Kevin Я включил все предупреждения, но я все еще сталкиваюсь с той же проблемой. – MethequalsMath

ответ

3

Эта линия является неправильным:

for (i = 1; 1 < MAXWORD; ++i) 

Второй 1 должен быть i, конечно. Это будет долгое время до 1 не менее 11. С другой стороны, вы затем читаете всю память, и рано или поздно вы будете читать что-то нечитаемое, а затем программа должна потерпеть крах. Есть вероятность, что он не потерпит крах, но поведение не определено, поэтому все, что происходит, в порядке.

Смежные вопросы