私は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;
}