実行されない文? – プログラミング – Home

通知
すべてクリア

[解決済] 実行されない文?


dan
 dan
(@dan)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

初歩的な質問ですけどお願いします。
(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を抜けた直後の文が実行されないために、
うまく表示できません。
どうしてでしょうか?


引用未解決
トピックタグ
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

バッファをフラッシュしてやる必要があるんじゃないかな。

cout << 文字数= << ccount << endl;
(endlは改行もしてくれる)


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

柴田先生、解説お願いします。

http://www.bohyoh.com/CandCPP/FAQ/FAQ00009.html


返信引用
dan
 dan
(@dan)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

やってみましたが、うまく行きませんでした。


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

「うまく行きませんでした」とはどういうことでしょう。
なにも表示されないということでしょうか。
そもそも「うまく表示できない」とはどういうことでしょうか。
単に表示されないだけだと思っていたのですが、違うのでしょうか
期待と異なる結果だということはわかるのですが、これだけでは貴方が何を期待しているのかま
では正確に伝わりません。

>しかし、「自分で付け足した行」がないと、whileを抜けた直後の文が実行されないために、
デバッガで追いかけてみてください。
この仮説の間違いに直ぐ気づきます。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

ひょっとしてこれのことですかね。

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200206/02060056.txt


返信引用
dan
 dan
(@dan)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

参考書の正解では、
一番初めに挙げたプログラムから、

「cout << 実行されない\n; //自分で付け足した行」

の行を除いたものになっていました。

しかし、これで実行すると、実行結果は、

「文字数=54」

と言う感じになり、while文直後の「改行数」が表示されません。
そこで、いろいろ試してみたところ、while直後の文が実行されていないと気づき、
どんな文でもいいんですけど、

「cout << 実行されない\n; //自分で付け足した行」

を書き加えることにより、実行結果は望んでいた

「改行数=4
文字数=54」

と言う具合になりました。
もちろん実行結果に、

「実行されない」

と言うものは表示されていません。

ちなみに、まだデバッガの使い方がよく分からないくらいの実力です。


返信引用
dan
 dan
(@dan)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

>dairygoods

似てるような気はするんですが・・・
CとC++が違ったり、EOFを使ってたりして、
ちょっと違うだけだと思うんですけど、
その違いで、理解するには難しいものになってしまってしまいます。

最終的に望んでいることは、
余計な行を加えないで、望んだ表示がされることです。


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

なるほどなるほど。
よく読めば始めからそう書いてありましたね。(^^A;
てことはフラッシュ云々とは関係のない話です。
dairygoodsさんが紹介したページを参考にしてください。

ちなみにこの現象、Win2kでは再現しない(=余分な記述のないコードのままで問題なく表示さ
れる)んですよね。
Win98固有の問題ということなんでしょうか。
# NT4ではどうなんだろう・・・

いずれにせよ大変失礼しましたm(__)m。>>danさん


返信引用
yas0302
 yas0302
(@yas0302)
ゲスト
結合: 23年前
投稿: 37
 

駄犬さんへ

> Win98固有の問題ということなんでしょうか。
> # NT4ではどうなんだろう・・・

× Win98
× WinMe
○ WinNT4.0
○ Win2K
○ WinXP

でした。


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

yas0302さん、わざわざありがとうございます。
試験環境を持っていないので大変参考になりました。

というわけでdanさん、Win98では避けられない既知の問題なんだなと割り切って余分なおまじ
ないコードを書くしかないようです。
不要な行はないに越したことはありませんが、理由さえわかっていれば学習を進める上で*さほ
ど*問題になることはないでしょう。
# 目障りですけどね。


返信引用
dan
 dan
(@dan)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

わかりました。割り切ってやっていきます。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました