私は K&R を読んでいますが、質問は次のとおりです。入力を出力にコピーするプログラムを作成し、1 つ以上の空白の各文字列を単一の空白に置き換えます。私の心の中では、自分が何をする必要があるかを知っていると思います。ブール値を設定して、いつスペースにいるのかを知ることができます。私はそれを試みましたが、成功しませんでした。私はこのコードを見つけましたが、それは機能します。何がスペースの書き込みを妨げているのかを理解するのに苦労しています。私はそれを持っているかもしれないと思いますが、明確にする必要があります。
#include <stdio.h>
int main(void)
{
int c;
int inspace;
inspace = 0;
while((c = getchar()) != EOF)
{
if(c == ' ')
{
if(inspace == 0)
{
inspace = 1;
putchar(c);
}
}
/* We haven't met 'else' yet, so we have to be a little clumsy */
if(c != ' ')
{
inspace = 0;
putchar(c);
}
}
return 0;
}
作業するテキストファイルを作成しました。テキストは次のとおりです。
so this is where you have been
「this」の「s」の後、状態は 1 に変わります。これは、スペースにいるためです。スペースが書き込まれ、次のスペースが読み取られます。それでは、次のように入力します。
while((c = getchar()) != EOF)
{
if(c == ' ')
{
if(inspace == 0)
{
inspace = 1;
putchar(c);
}
しかし、inspace は 0 ではなく、1 です。コードはスキップして return 0; になり、何も書き込まずに while ループを続行しますか? 0 を返します。はループの外にありますが、これが値が返されていないことを確認できる唯一の方法です。