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と関連する良く見られている質問

Qstd::cout << p と std::cout << *p の違

std::cout << p と std::cout << *p の違いは?

VC++でコードを書きながらC++を学んでいます。
ポインタで疑問に思ったことがあるので質問させて下さい。

int* p;
int n = 100;
p = &a;

上記のように変数を宣言・代入した場合、
std::cout << p と std::cout << *p のどちらでも"100"と表示されます。
これら二つの違いは何でしょうか?
本来*pとすべきところをpにしてもVC++が気を利かせて
&pのアドレスに入っているデータを表示してくれているということでしょうか?

Aベストアンサー

No.1氏の回答にあるコードを元に答えます。

>この場合&pでもアドレスが表示されると思うのですが、
>「&p」と「p」の違いは何でしょうか?
pはaのアドレス。
&pはpのアドレス。
(「p = &a」では、どこのアドレスを渡しているのか考えてみて下さい)


「&p」と「p」の違いというのが参照とポインタの違いを聞いているのだとしたら、constのポインタ==参照型で良かったと思います。
p = &a; //OK
&a = p; //error
int* const p2 = p;
p2 = &a; //error

Qint i,j; \n i=0,j=5;

int i,j;
i=0;
j=5:
と書いてあるソースは普通ですが、
int i,j;
i=0,j=5:
と書いてあるソースもあります。
後者はC++の正しい書式ですか?

カンマ演算子というのは後者のカンマのことですか?

Aベストアンサー

 正しい書式です。

i=0,j=5;
 における、「,」をカンマ演算子といいます。2項の演算子です。カンマで区切られた演算を「左から順番に」実行し、最後の演算を結果として返します。
 したがって、例の文であれば、i=0を実行し、次にj=5を実行。そして、j=5の結果の5を結果として返します。
 ・・・
 が、本来的には、あまり、例のような使い方はしませんね。よく見られるのは、次のような場合です。

 for (i=0,j=0 ; i < 50 ; ++i,++j) {

 のような形でよく見られます。for文の各式は、一つの式でなければならないので、こんな書き方をするわけです。初期化と更新部が一つにまとまり、ループが読みやすくなるのが利点かな。

Q改行の書き方('\n' "\n")はどっちの書き方でもいいのでしょうか?

タイトルの通りです。
↑の方法ではどっちもコンパイルできる事が分かったのですが、どっちも正しいですよね?
よろしくお願いします。

Aベストアンサー

受けて側にあわせてやる必要があります

'\n'は文字として相手が受け取る場合です
"\n"は文字列として相手が受け取る場合です

void func1( char ch );
void func2( char* str );
とあった場合 func1には '\n'で渡し fucn2は "\n"で渡します

Qerror C2143: 構文エラー : ';' が '{' の前にありません。

#include <stdio.h>
int main(void)
{
  int in;
  printf("20以上の数字を入力してください\n");
  scanf("%d", &in);

  if(in >= 20){
    printf("20以上の数字です。\n");
    printf("終了します\n\n");}

  else if(in <= 5){
    printf("5以下の数字が入力されました\n");
    printf("20には程遠いです\n\n");}

  else(in <= 19){
    printf("20以上の数字ではありません\n");
    printf("20以上の数字を入力してください\n\n");}
  return 0;
}

C言語でVisual C++ Expressを使っています
このコードでビルドすると
(16) : error C2143: 構文エラー : ';' が '{' の前にありません。
と表示されてしまいます。何がいけないのでしょうか?

#include <stdio.h>
int main(void)
{
  int in;
  printf("20以上の数字を入力してください\n");
  scanf("%d", &in);

  if(in >= 20){
    printf("20以上の数字です。\n");
    printf("終了します\n\n");}

  else if(in <= 5){
    printf("5以下の数字が入力されました\n");
    printf("20には程遠いです\n\n");}

  else(in <= 19){
    printf("20以上の数字ではありません\n");
    printf("20以上の数字を入力してください\n\n");}
  return...続きを読む

Aベストアンサー

  else(in <= 19){
の部分ですが、
  else if (in <= 19){
のつもりだったのでしょうか。
この場合、
  else{
だけでよいです。

QC++の’ \n’と ’endl’ の違いについて

C++の独習を始めたばかりの者です。
’cout’のあとにつく'\n'と'endl'の違いがよくわかりません。構文が本によって少しづつ違いがあるので、戸惑っています。「どちらでもいい」の感じで片付けたほうが良いのでしょうか?よろしくお願いいたします。

Aベストアンサー

> 「フラッシュ」の意味がわからないのですが、

ストリームバッファに溜まった未出力のデータをすべて吐き出します。


人気Q&Aランキング

おすすめ情報