これはKernighanとRitchieの18ページから来ている非常に基本的なCの質問です。getchar()がバックスペースなどの文字を読み取っていないのはなぜですか?
私は、キーボードからの文字入力をカウントするため、この非常に簡単なコードをコンパイルした:
#include <stdio.h>
/* count characters in input; 1st version */
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%1d\n", nc);
}
これは罰金コンパイル、それは、正常に動作し、すなわち予想通り、私は「Hello Worldの」と入力すると、かなりの振る舞いCTRLDを押してEOF文字を入力すると、値11が返されます。
私が間違っていると、バックスペースを使用して文字を削除して再入力することができ、EOFを呼び出すときに端末が表示する文字数だけが返されます。
4文字を入力すると2文字を削除し、別の2文字を入力すると、8文字(4文字+ 2文字+ 2文字)として出力されません。 4?
私は明らかにCがバックスペースをどのように処理するのか誤解しています。また、コードが変数をどのようにインクリメントするのですか?nc
?
編集は端末アプリケーションによって処理されるので、 'getchar'は決して削除を読みません。 –
注:前者は標準に従って有効なものなので、 'main()'の代わりに 'int main(void)'を使うべきです。 –
@CoolGuy:実際、2番目のバージョンはまだ有効ですが、遺産です。これは陳腐化機能であり、標準から削除される可能性があります。言った:はい、最初のバージョンを確実に使用すべきです。一般に、プロトタイプ形式の署名は、一般的な関数に使用する必要があります。 – Olaf