papaまる さんが書きました:1 冒頭のchar c = '¥0';は、宣言したら何かしら変数を入力する必要があるのでヌル文字を入れているのでしょうか?
普通の処理系では、宣言したら値を入れないといけないという決まりは無いはずです。 (「変数を入力する」というのは意味がよくわかりません)
このプログラムではcの値を使用する前にかならずc = getchar();を通るので、ここでの初期化の必要は無いでしょう。
papaまる さんが書きました:2 char prevletter;、int wordnum;、 int word_in;はwhile(1)の中で、変数がそれぞれ入力されています。char c = '¥0';だけ、なぜ冒頭なのでしょうか?
確かに不自然ですね。
cだけ内側のwhileループで値を代入されているのと何か関係があるかもしれない気がします。
気になるなら筆者に聞いたほうがいいかもしれません。
papaまる さんが書きました:この処理は、スペースとコロンで単語数を判断していると思います。
papaまる さんが書きました: ・ cの中身はスペースでもコロンでもないtである。よってこの条件式はスルー
papaまる さんが書きました: ・ 次にcat.の部分の最後のコロンが、getchar()から入力され、cに代入
papaまる さんが書きました: ・ cの中身はコロンで、条件式に入る
コロンではなくピリオドですね。
papaまる さんが書きました:一番、最後の何も入力がない状態をどうやって判断しているのだろう、と疑問に思います。I love cat.改行と打ち込み、数秒間、キーボードの打ち込みがないならば、入力なしと判断して、外側のwhile(1)を抜けるのでしょうか??
空行(入力の最初または改行文字の直後に改行文字)を入力すると、内側のwhileの前に初期化したprevletter ='¥0' (複数文字の文字定数の値は環境依存。\0の誤り?) のまま内側のwhileの後に行くので、
if文の条件式が真になり、break;が実行されて外側のwhileループから抜けるはずです。
キーボードの打ち込みがない場合は、(標準入力がキーボードに繋がっている、かつシグナルなどで止められなければ)いつまでも入力を待っているはずです。
[quote="papaまる" id=3,19529,147625]1 冒頭のchar c = '¥0';は、宣言したら何かしら変数を入力する必要があるのでヌル文字を入れているのでしょうか?[/quote]
普通の処理系では、宣言したら値を入れないといけないという決まりは無いはずです。 (「変数を入力する」というのは意味がよくわかりません)
このプログラムではcの値を使用する前にかならずc = getchar();を通るので、ここでの初期化の必要は無いでしょう。
[quote="papaまる" id=3,19529,147625]2 char prevletter;、int wordnum;、 int word_in;はwhile(1)の中で、変数がそれぞれ入力されています。char c = '¥0';だけ、なぜ冒頭なのでしょうか?[/quote]
確かに不自然ですね。
cだけ内側のwhileループで値を代入されているのと何か関係があるかもしれない気がします。
気になるなら筆者に聞いたほうがいいかもしれません。
[quote="papaまる" id=3,19529,147625]この処理は、スペースとコロンで単語数を判断していると思います。
[/quote][quote="papaまる" id=3,19529,147625] ・ cの中身はスペースでもコロンでもないtである。よってこの条件式はスルー
[/quote][quote="papaまる" id=3,19529,147625] ・ 次にcat.の部分の最後のコロンが、getchar()から入力され、cに代入
[/quote][quote="papaまる" id=3,19529,147625] ・ cの中身はコロンで、条件式に入る
[/quote]
コロンではなくピリオドですね。
[quote="papaまる" id=3,19529,147625]一番、最後の何も入力がない状態をどうやって判断しているのだろう、と疑問に思います。I love cat.改行と打ち込み、数秒間、キーボードの打ち込みがないならば、入力なしと判断して、外側のwhile(1)を抜けるのでしょうか??[/quote]
空行(入力の最初または改行文字の直後に改行文字)を入力すると、内側のwhileの前に初期化したprevletter ='¥0' (複数文字の文字定数の値は環境依存。\0の誤り?) のまま内側のwhileの後に行くので、
if文の条件式が真になり、break;が実行されて外側のwhileループから抜けるはずです。
キーボードの打ち込みがない場合は、(標準入力がキーボードに繋がっている、かつシグナルなどで止められなければ)いつまでも入力を待っているはずです。