4

私はK&RからCを自分自身に教えようとしている合計Cn00bです。私の質問はちょっと恥ずかしいほど初歩的なものです。OK、ここに行きます:私はgetcharを使って私が期待した種類の出力を与えるプログラムを得ることができません。K&Rが手元にある場合、私は演習1.13で立ち往生しています。質問は、「入力された単語の長さのヒストグラムを印刷するプログラムを作成する」というもので、この問題のために、水平バージョンにさえ取り組むことができません。

XPでDev-C++(mingWコンパイラ)を使用していて、コマンドラインからプログラムを実行しています。私の問題は、プログラムを実行しようとすると、スキャンする文字を入力するのを待つのですが、入力が完了してEnterキーを押すと、何も実行されませ。期待どおりにヒストグラムを出力することを期待しています。実際には、単語の長さをカウントしているようには見えません。コードでわかるように、ctr配列にあるものを出力して、何かが含まれているかどうかを確認しようとすると、何も出力されないためです。

私はn00bなので、コードに問題があるのか​​、コマンドラインに問題があるのか​​わかりません。しかし、モデルプログラムをコンパイルして実行しようとすると、同じことが起こるため、システムに問題があるのではないかと思います。入力を入力し、Enterキーを押すと、何も起こりません。Ctrl-Cを押すと、モデルの出力とはまったく異なるアスタリスクが1つか2つ表示されることがあります。それ以外の場合は、何もしません(プロンプトに戻るだけです)。

これが演習のコードです。私はこれに丸一日を費やし、プログラミングを続ける私の能力に疑問を投げかけています。誰かが私をこの穴から抜け出すことができれば、本当に本当に感謝しています!

また、前述のモデルプログラムについて別の質問がありますが、それ自体の質問に投稿する必要があると思います。皆さんありがとう :)

#include <stdio.h>

//#define 1 IN
//#define 0 OUT
int main () {
    //start w/ state = OUT
    int c = 0;
//    int state = OUT;
    int len = 0;
    int ctr[12];
    int i, j;
    i = j = 0;

    for (i = 0; i <12; i++)
        ctr[i] = 0;
    while ((c = getchar()) != EOF)
       if (c != ' ' && c != '\t' && c != '\n') {
//            state = IN;
            len++;
            printf("%d", len);
            }
       else {
            ctr[len]++;
            len = 0;
            }            
    for (i = 0; i <12; i++) 
        printf("%d\n", ctr[i]);
    for (i = 0; i <12; i++) {
        printf("%d\n", i);   
        for (j = 0; j <= ctr[i]; j++)
            printf("-");
        printf("\n");
        }
    return 0;
}
4

3 に答える 3

7

while ループは、行末ではなくファイルの終わりを表す EOF を探しています。

Windows では、ファイルの終わりをシミュレートするために ctrl-z を入力する必要があります。

于 2010-01-04T22:00:05.043 に答える
1

実際に c (入力) をどこにも保存しているようには見えません...また、印刷もしていません。文字列のサイズを出力していますが、実際の文字は出力していません。ctr[i] = c; の場合 どこかに(それは配列に文字を追加することです)、配列を印刷すると、入力が表示されます。そうそう、ctrl-z に関する回答も重要です。また、この言語にまったく慣れていない場合は、while コンテンツを括弧で囲むことを強くお勧めします。コードを一瞥しただけで、while ループの範囲に何が含まれ、中かっこがなければ何が含まれないかを理解できるようになるまでには、しばらく時間がかかります。

于 2010-01-04T21:59:53.233 に答える