3

次のように、入力の文字を受け入れてその文字を出力するプログラムを作成しました

int ch = getchar();
printf("%c", ch);

期待どおりに機能しました。それから、歓迎して最初に印刷することにしましたHello

printf("Hello!\n");
int ch = getchar();
printf("%c", ch);

驚いたことに、これによりコンパイラは 2 つのエラーをスローしました。

エラー C2065: 'ch': 宣言されていない識別子
エラー C2143: 構文エラー: ';' がありません 「タイプ」の前に

最初の行を追加すると、なぜそれが起こるのかわかりませんでした。とにかく、プログラムをリファクタリングして宣言を取り除くintと、エラーは魔法のように消えました。

printf("Hello!\n");
printf("%c", getchar());

どうしたの?これらのエラーが表示されてから消える魔法は何ですか?

4

4 に答える 4

5

古い c コンパイラを使用している場合は、すべての変数宣言を他の何よりも先に行う必要があります。試す:

int ch;
printf("Hello!\n");
ch = getchar();
printf("%c", ch);
于 2012-05-02T02:42:07.277 に答える
0

おそらく、かなり古い C コンパイラを使用しています。おそらくC89をサポートしているもの。so を使用すると、ブロック内で変数を宣言する前に変数を宣言する必要があります (関数やメインなど)。 2 つの方法: 最初に ch を宣言します。

int ch = getchar();
printf("Hello!\n");
printf("%c", ch);

または、さらに良いことに、コンパイラを変更してみてください。どのOSを使用していますか?ウィンドウズ?Linux? マック?

また、簡単なメモ。getchar を使用して整数を取得しています。

getchar の代わりに scanf("%d", &ch) を使用してみてください。または、本当に getchar を使用し、それを char として出力する必要がある場合は、ch を char 自体として宣言し、再び整数として使用する必要がある場合は、char を整数に変換する itoa 関数を使用します。 .

于 2012-05-02T03:59:57.563 に答える