C++実行結果に改行数のみ表示、文字数がでません
- C++のプログラムを実行する際に、改行数のみ表示されて文字数が表示されない問題が発生しています。
- 実行結果に改行数のみ表示され、文字数が表示されない問題が発生しています。
- C++のプログラムを実行すると、改行数は表示されるものの、文字数が表示されない問題が発生しています。
- ベストアンサー
入力文字数がでません。
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); }
- yosiyosi
- お礼率58% (109/185)
- C・C++・C#
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すみません。すっかり回答が遅くなってしまいました。 >> hoge.exe > out.txt とすれば、結果がファイルに書き込まれ、 > これは、このままDOSに打ち込むのでしょうか? 実際には「実行ファイル名 > 出力ファイル名」になります。 出力ファイル名に、既に存在するファイル名を指定すると、その内容が上書きされてしまうので注意が必要です。 > 実行ファイルの名前 < 入力ファイル名 > 出力ファイル名 でやって見のですが、プログラム全体の文字数、改行数が表示されて、実行結果の文字数、改行数が表示されません。 これって、入力ファイル名にソースファイルを指定していませんか? 入力をキーボードからにしたければ、「< 入力ファイル名」は書かないようにします。 > つまり、何文字、何行打ち込もうとも、 ちょっとこれが不明だったんですが、入力ファイルを指定しているにも関わらず、入力できたということでしょうか? 普通、入力ファイルを指定すると、キーボードから入力する代わりにファイルの内容が読み出され、キー入力待ちにはならないはずなんですが・・・ 不明な点は、また補足ください。
その他の回答 (2)
- leaz024
- ベストアンサー率75% (398/526)
過去にも同様の症状での質問がありました。(下記URL) 入力の終了には Ctrl+Z を使いますよね。 どうもこれが悪さをして、次の1行が表示されなくなる(消される?)ようです。 恐らくMS-DOSのコンソール入出力制御が、そういう仕様なのでしょう。 これはあくまでコンソール上での話なので、出力をファイルへリダイレクトすれば正しく結果が書き込まれますし、入力をファイルからリダイレクトさせれば正しい結果が表示されます。 DOS窓内のみで作業が必要なら、文字数を出力する前に、改行を1つ出力すればOKです。 # リダイレクトというのは、出力先を画面からファイルに変えたり、入力元をキーボードからファイルに変えたりする方法です。 # hoge.exe > out.txt とすれば、結果がファイルに書き込まれ、 # hoge.exe < in.txt とすれば、ファイルの内容が入力に使われます。 # もちろん、in.txt には、予め入力したい内容を書き込んでおく必要があります。
補足
>DOS窓内のみで作業が必要なら、文字数を出力する前に、改行を1つ出力すればOKです。 これは解りました。 > hoge.exe > out.txt とすれば、結果がファイルに書き込まれ、 これは、このままDOSに打ち込むのでしょうか? 解らなかったので以下を実行しました。 実行ファイルの名前 < 入力ファイル名 > 出力ファイル名 でやって見のですが、プログラム全体の文字数、改行数が表示されて、実行結果の文字数、改行数が表示されません。 つまり、何文字、何行打ち込もうとも、 文字数=293 改行数=18となります。 例えば、 aaa aaa の場合、 文字数=8 改行数=2 という具合に、出力ファイルに出ないのでしょうか? よろしくお願いします。
- brogie
- ベストアンサー率33% (131/392)
>文字数がでません。 この意味がわかりません! 文字数+改行数になるようですが? 0とでるのですか? 自信なし!
関連するQ&A
- 入力に出現する数字文字をカウントするプログラム
こんにちは、毎度お世話になります。 #include<iostream> using namespace std; int main(void){ char c; int cnt[10] = {0}; while(cin.get(c)){ if(c >= '0' && c <= '9') cnt[c - '0']++; } for (int = 0; i < 10; i++) cout << i << "の出現回数:" << cnt[i] << '\n'; return(0); } [/code] ここで質問なんですが、このプログラムの中で数字文字をカウントしているのはどこでしょうか? そして while(cin.get(c)){ if(c >= '0' && c <= '9') cnt[c - '0']++; } ここの部分が何を表しているのか解りません。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- cout関数を使っているのですが,画面に出力されません。
いつもお世話になっております。今回はC++言語について質問があります。 次のプログラムは画面から入力された文字の数とリターンの数を数えるプ ログラムです。 /* 入力の文字数を数えるプログラム */ #include <iostream.h> int main(int argc, char **argv){ char c; int RETcount = 0; //改行数 int CHARcount = 0; //文字数 while(cin.get(c)){ if(c == '\n'){ ++RETcount; } else{ ++CHARcount; } } cout << "RET:" << RETcount << '\n'; //(1) ここの部分が表示されません。 cout << "CHAR:" << CHARcount << '\n';//(2) ここの部分は表示されます。 return 0; } 何故か(1)の部分が表示されません(^^; いきなり(2)の部分が表示されます。 そこで(1)(2)の部分を下記の(3)(4)(5)に書換え cout << "RET:" << RETcount << '\n'; //(3) cout << "RET:" << RETcount << '\n'; //(4) cout << "CHAR:" << CHARcount << '\n'; //(5) 実行した所(4)と(5)の部分は表示されるのですが, (3)の部分が表示されません。 つまりwhile{・・・・・}の直後のcoutが表示されません。 while(cin.get(c))で何かが起こっているのでしょうか????(^^; 使用環境は,Windowsで入力の終了は[Ctrl + Z]で行っています。 ご存知の方どうかご指導よろしくお願いします。
- ベストアンサー
- C・C++・C#
- プロンプト入力 malloc( )
#include <iostream.h> void f(char* str); main(){ char s[8] = "\0"; cout << "文字を入力" << '\n'; fgets(s, 8, stdin); f(s); } void f(char* str){ char* c; c = (char*)malloc(sizeof(char) * strlen(str)+1); cout << strlen(str) << '\n'; cout << sizeof(c); free(c); } - 結果 - 文字を入力 ( a、Ctrl+Z ) a 1 4 でした。 cout << sizeof(c); の結果は4でした。1バイトの入力だから\0を含めて 2バイトを確保したかった。 そのためにはどうしたらいいんですか? どうして4だったんですか? 文字を入力するとこで、Ctrl+Z の代わりに Enter を押すと Enter まで s に格納されてしまう。 cin を使うと8バイト以上の入力でも s に格納されてしまう。 そうならないためのよい方法があったら教えてください。
- ベストアンサー
- C・C++・C#
- 数の大きさ
C++初心者です。以下の様なプログラムで、合計を求めたいのですが、あまり桁数の大きい数だと、正確な値がでません。(20桁とか・・・)これは一体どういうことが考えられますか?//配列の全要素の合計を求める #include<iostream.h> int main(void) { int i; int a[5]={0}.; cout<<"5個の整数値を入力しましょう。 \n"; for(i=0; i<5; i++) { cout<<"No."<<i+1<<": "; cin>>a[i]; } int sum=0; for(i=0; i<5; i++) sum=sum+a[i]; cout<<"合計は"<<sum<<"です。\n"; return(0); }
- ベストアンサー
- C・C++・C#
- C++
C++で書いた下記のプログラムが、文字の入力が1023個までなら実行されますが、1024個を超えると実行されません。なぜだか分かる方、教えてください。 #include <iostream> #include <string> using namespace std; int main(void) { string Str; cin >> Str; cout << "here"; }
- 締切済み
- その他(インターネット・Webサービス)
- 配列の練習問題
#include<iostream> using namespace std; //count関数の宣言 int count(char str[], char ch); int main() { char str[100]; char ch; cout << "文字列を入力して下さい。\n"; cin >> str; cout << "文字列から探す文字を入力して下さい。\n"; cin >> ch; int c = count(str, ch); cout << str << "の中に" << ch << "は" << c << "個あります。\n"; return 0; } //count関数の定義 int count(char str[], char ch) { int i = 0; int c = 0; while (str[i]) { if (str[i] == ch) c++; i++; } return c; } こんにちは。 この問題の解答のプログラムの意味がイマイチ解らないので良かったら教えて下さい。 確認がてらに質問します。 よろしくお願いします。
- 締切済み
- C・C++・C#
- n進数を10進数に変換するプログラムがわかりません
整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム 関数void base2dec(int n, string digits, int &dec)を使用する 実行例 110101(2)=53 123(8)=83 7ACE(16)=31438 以下はとりあえずつくったみたプログラムです #include<iostream> #include<string> using namespace std; void base2dec(int n, string digits, int &dec) { int i,x=0; for(i=0; i=digits.size()-1; i++) { if(n<10) { x=digits[i]-'0'; } else { x=digits[i]-'A'+10; } dec=(x*n); if(cin >> digits[i++]) { if(n<10) { dec=dec+(digits[i++]-'0'); } else { dec=dec+(digits[i++]-'A'+10); } } } int value = dec; } int main() { int n,value; string digits; cout << "何進数ですか-->"; cin >>n; cout << "数字列を入力してください-->"; cin >>digits;; base2dec(n,digits,value); cout << digits << "(" << n << ")=" << value << endl; return 0; } void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。ちなみにn進数から10進数に直す方法は理解しています。
- ベストアンサー
- C・C++・C#
お礼
出来ました。 いろいろありがとうございました。