初歩的な質問ですけどお願いします。
(win98 VC6.0)
参考書を見ながら勉強してるところです。
「入力した文字の文字数と改行数をカウントして表示する」
というもので、
#include <iostream.h>
int main(void)
{
char c;
int ccount = 0;
int ncount = 0;
while (cin.get(c)){
ccount++ ;
if(c == '\n')
ncount++ ;
}
cout << 実行されない\n; //自分で付け足した行
cout << 改行数= << ncount << '\n';
cout << 文字数= << ccount << '\n';
return (0);
}
解答は、上のようなものでした。
しかし、「自分で付け足した行」がないと、whileを抜けた直後の文が実行されないために、
うまく表示できません。
どうしてでしょうか?
バッファをフラッシュしてやる必要があるんじゃないかな。
cout << 文字数= << ccount << endl;
(endlは改行もしてくれる)
やってみましたが、うまく行きませんでした。
「うまく行きませんでした」とはどういうことでしょう。
なにも表示されないということでしょうか。
そもそも「うまく表示できない」とはどういうことでしょうか。
単に表示されないだけだと思っていたのですが、違うのでしょうか
期待と異なる結果だということはわかるのですが、これだけでは貴方が何を期待しているのかま
では正確に伝わりません。
>しかし、「自分で付け足した行」がないと、whileを抜けた直後の文が実行されないために、
デバッガで追いかけてみてください。
この仮説の間違いに直ぐ気づきます。
参考書の正解では、
一番初めに挙げたプログラムから、
「cout << 実行されない\n; //自分で付け足した行」
の行を除いたものになっていました。
しかし、これで実行すると、実行結果は、
「文字数=54」
と言う感じになり、while文直後の「改行数」が表示されません。
そこで、いろいろ試してみたところ、while直後の文が実行されていないと気づき、
どんな文でもいいんですけど、
「cout << 実行されない\n; //自分で付け足した行」
を書き加えることにより、実行結果は望んでいた
「改行数=4
文字数=54」
と言う具合になりました。
もちろん実行結果に、
「実行されない」
と言うものは表示されていません。
ちなみに、まだデバッガの使い方がよく分からないくらいの実力です。
>dairygoods
似てるような気はするんですが・・・
CとC++が違ったり、EOFを使ってたりして、
ちょっと違うだけだと思うんですけど、
その違いで、理解するには難しいものになってしまってしまいます。
最終的に望んでいることは、
余計な行を加えないで、望んだ表示がされることです。
なるほどなるほど。
よく読めば始めからそう書いてありましたね。(^^A;
てことはフラッシュ云々とは関係のない話です。
dairygoodsさんが紹介したページを参考にしてください。
ちなみにこの現象、Win2kでは再現しない(=余分な記述のないコードのままで問題なく表示さ
れる)んですよね。
Win98固有の問題ということなんでしょうか。
# NT4ではどうなんだろう・・・
いずれにせよ大変失礼しましたm(__)m。>>danさん
駄犬さんへ
> Win98固有の問題ということなんでしょうか。
> # NT4ではどうなんだろう・・・
× Win98
× WinMe
○ WinNT4.0
○ Win2K
○ WinXP
でした。
yas0302さん、わざわざありがとうございます。
試験環境を持っていないので大変参考になりました。
というわけでdanさん、Win98では避けられない既知の問題なんだなと割り切って余分なおまじ
ないコードを書くしかないようです。
不要な行はないに越したことはありませんが、理由さえわかっていれば学習を進める上で*さほ
ど*問題になることはないでしょう。
# 目障りですけどね。
わかりました。割り切ってやっていきます。
ありがとうございました。