K&R の練習をしていると、非常に興味深い質問が見つかりました。
次のようにコードします。
include <stdio.h>
main()
{
int c;
int bn;
bn=0;
while((c=getchar())!=EOF)
{
if(c==' ')
bn++;
}
printf("blanks counter:%d\n",bn);
}
コード関数は統計的空白の数です
一度にすべての単語を入力します。バックスペース キーは使用しません。完了です。
$ ./a.out
I have a dream
blanks counter:3
しかし、バックスペースキーを使用すると、入力プロセスで何が起こる可能性がありますか?
空白キーが押されたときに getchar() 関数がこのイベントを取得し、 bn++ を実行する必要があると推測しているため、後でバックスペースキーを押してこの空白を削除しても、 bn 変数の値は変更されません。しかし、練習の結果は私の推測とは異なります。練習のプログラムは次のとおりです。
最初のステップ:最初の空白を入力
2 番目のステップ: バックスペース キーを使用して空白を削除 します 3 番目のステップ: 残りの文字入力を終了します
なぜ結果は 4 ではなく 3 なのですか? なぜ bn 変数の値は、バックスペース キーを押すと変更されるのですか?
私にいくつかのアイデアをください、ありがとう!