-2

演習は

「入力に含まれる単語の長さのヒストグラムを出力するプログラムを作成してください。」

これが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);
}
4

1 に答える 1

3

この行は間違っています:

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

もちろん、2番目1は でなければなりません。よりも少なくないのはi、かなり前のことです。一方、メモリ全体を読み込んでしまうと、遅かれ早かれ、読み込めないものを読み込んでしまい、プログラムがクラッシュすることになります。クラッシュしない可能性はありますが、動作は定義されていないため、何が起こっても問題ありません。111

于 2013-07-12T04:44:40.777 に答える