C++です。以下を実行したのですが、実行結果に改行数は出るが文字数がでません。お願いします。

#include <iostream.h>

int main(void)
{
char c;
int ccount = 0;
int ncount = 0;

while (cin.get(c)) {
ccount++;
if (c == '\n')
ncount++;
}
cout << "文字数=" << ccount << '\n';
cout << "改行数=" << ncount << '\n';

return (0);
}

A 回答 (3件)

すみません。

すっかり回答が遅くなってしまいました。

>> hoge.exe > out.txt  とすれば、結果がファイルに書き込まれ、
> これは、このままDOSに打ち込むのでしょうか?

実際には「実行ファイル名 > 出力ファイル名」になります。
出力ファイル名に、既に存在するファイル名を指定すると、その内容が上書きされてしまうので注意が必要です。

> 実行ファイルの名前 < 入力ファイル名 > 出力ファイル名 でやって見のですが、プログラム全体の文字数、改行数が表示されて、実行結果の文字数、改行数が表示されません。

これって、入力ファイル名にソースファイルを指定していませんか?
入力をキーボードからにしたければ、「< 入力ファイル名」は書かないようにします。

> つまり、何文字、何行打ち込もうとも、

ちょっとこれが不明だったんですが、入力ファイルを指定しているにも関わらず、入力できたということでしょうか?
普通、入力ファイルを指定すると、キーボードから入力する代わりにファイルの内容が読み出され、キー入力待ちにはならないはずなんですが・・・

不明な点は、また補足ください。
    • good
    • 0
この回答へのお礼

出来ました。
いろいろありがとうございました。

お礼日時:2002/01/04 17:16

過去にも同様の症状での質問がありました。

(下記URL)

入力の終了には Ctrl+Z を使いますよね。
どうもこれが悪さをして、次の1行が表示されなくなる(消される?)ようです。
恐らくMS-DOSのコンソール入出力制御が、そういう仕様なのでしょう。

これはあくまでコンソール上での話なので、出力をファイルへリダイレクトすれば正しく結果が書き込まれますし、入力をファイルからリダイレクトさせれば正しい結果が表示されます。

DOS窓内のみで作業が必要なら、文字数を出力する前に、改行を1つ出力すればOKです。

# リダイレクトというのは、出力先を画面からファイルに変えたり、入力元をキーボードからファイルに変えたりする方法です。
# hoge.exe > out.txt  とすれば、結果がファイルに書き込まれ、
# hoge.exe < in.txt  とすれば、ファイルの内容が入力に使われます。
# もちろん、in.txt には、予め入力したい内容を書き込んでおく必要があります。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=161528

この回答への補足

>DOS窓内のみで作業が必要なら、文字数を出力する前に、改行を1つ出力すればOKです。

これは解りました。

> hoge.exe > out.txt  とすれば、結果がファイルに書き込まれ、

これは、このままDOSに打ち込むのでしょうか?
解らなかったので以下を実行しました。

実行ファイルの名前 < 入力ファイル名 > 出力ファイル名 でやって見のですが、プログラム全体の文字数、改行数が表示されて、実行結果の文字数、改行数が表示されません。
つまり、何文字、何行打ち込もうとも、
文字数=293
改行数=18となります。
例えば、
aaa
aaa
  
の場合、
文字数=8
改行数=2
という具合に、出力ファイルに出ないのでしょうか?
よろしくお願いします。

補足日時:2001/12/22 09:08
    • good
    • 0

>文字数がでません。



この意味がわかりません!

文字数+改行数になるようですが?
0とでるのですか?

自信なし!
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ