ここに投稿するのは初めてなので、これが意図したとおりになることを願っています。
私は K&R の初期の演習の 1 つを行っています。目的は、getchar() を使用してユーザーから一連の文字を取得し、putchar() を使用してそれらを出力することですが、余分なスペースはスキップします。演習に対する私の解決策はうまく機能しますが、その理由がわかりません。
プログラムは次のとおりです。
#include <stdio.h>
int main()
{
int c, spc;
c = 0;
spc = 0;
while(c != EOF)
{
c = getchar();
if(c == ' ')
{
if(spc != 1)
{
putchar(c);
spc = 1;
}
}
if(c != ' ')
{
spc = 0;
putchar(c);
}
}
return 0;
}
ループは 1 つだけで、最初の繰り返しで期待どおり getchar() に到達すると実行が停止します。キャリッジ リターンが押されると、プログラムはユーザーがバッファに入力した内容を出力します。余分なスペースは除きます。まさに本来の動作です。
しかし、私が理解していないのは、getchar() に遭遇したときに、ループの後続の反復ごとに実行が停止しない理由です。/n 文字はそれと関係がありますか? 改行も出力され、すべてが出力された後、getchar() で再び停止することに気付きました。では、バッファ内のすべてを出力する際に、各反復の開始時に getchar() をスキップするのはなぜですか?
私は長い間 C をいじっていましたが、「正しい」方法で学ぶ努力をしたのはつい最近のことです。私にはある程度の経験があるので、答えをあまり馬鹿にする必要はありません(つまり、5 歳ではなく 10 歳に説明するように)。