いつもお世話になっております。今回は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]で行っています。
ご存知の方どうかご指導よろしくお願いします。
No.2ベストアンサー
- 回答日時:
以下の環境で試したところ、問題の状況が再現しました^^;
・Windows98 + Borland C++ 5.5.1 for Win32
Ctrl+Zがあると、次の1行が表示されない(消される?)ようです。
多分MS-DOSのコンソール入出力制御が、そういう仕様なのでしょう。
ためしに出力をテキストファイルにリダイレクトしたところ、ちゃんと
RET:2
CHAR:8
と書き込まれていましたから。
__sourin__さんも、DOS窓から「実行ファイル名 > test.txt」などとして、確認してみて下さい。
というわけで、(1)の前に、
cout << endl;
としてやれば、DOS窓上で実行しても大丈夫みたいですね。
(C++では、'\n'の代わりにendlをcoutへ食わせても、改行になります。)
leaz024さんお返事どうもありがとうございます^^
ホントだ~!リダイレクトを使うと正しく表示されました。
逆に「実行ファイル名 < 入力データ.txt」でもDOS窓上に正しく表示されました。
leaz024さんのおしゃられた
>MS-DOSのコンソール入出力制御が、そういう仕様なのでしょう。
など,調べてもう少し原因を探ってみようと思います。
進展があり次第投稿しますので,またご指導よろしくお願いします^^
ありがとうございました^^
No.1
- 回答日時:
以下の環境で試しましたが、
・Linux-2.2.14 + egcs-2.91.66
・Windows2000 + Borland C++ 5.5.1 for Win32
全く問題ありませんでしたよ。
あなたの環境が何かはわかりませんが、少なくともソースコード的には何の問題も無いようです。
この回答への補足
お返事どうもありがとうございます^^
使用環境はWin98でVisual C++ 6.0を使っています。
>全く問題ありませんでしたよ。
とは(1)の部分も省略されず正常に動くという事なのでしょうか?
予定では
abcd[return]
abcd[return]
[Ctrl + Z]
RET:2
CHAR:8
となるはずなのに
私のものだと
abcd[return]
abcd[return]
[Ctrl + Z]
CHAR:8
と表示されてしまうのです。
>少なくともソースコード的には何の問題も無いようです。
私もそう思うのですが何故なのでしょうね?(^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
cout と cerrの違い
C言語・C++・C#
-
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
char*を初期化したいのですが
C言語・C++・C#
-
-
4
関数から配列を返すには?
C言語・C++・C#
-
5
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
6
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
7
C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい
C言語・C++・C#
-
8
VC++から引数付きexeファイルの実行
C言語・C++・C#
-
9
ファイル出力の場所を指定
C言語・C++・C#
-
10
コマンド(例えばls)の出力結果を文字列で取得するプログラムの作成方法
C言語・C++・C#
-
11
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
12
C言語でヘッダファイルにグローバル変数を宣言する
C言語・C++・C#
-
13
クリティカルエラー Expression: (Buffer too small", 0)"
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
*をユーザーが入力した数字の数...
-
"scanf"でエンターで改行させな...
-
数字以外が入力されたらエラー...
-
scanf が無視されます
-
正負を反転させて出力するプロ...
-
batプログラム上で文字列を入力...
-
C言語 for文をつかって記号を表...
-
ワードで文字を入力する時の変...
-
数字と、文字列入力のチェック...
-
Spreadのコンボボックス
-
"gets"は危険なのでしょうか?
-
Eclipseでコマンドラインを入力...
-
C言語scanf_sで何故か2回入力に...
-
C言語 逆ピラミッドの作り方
-
C言語でgetchar();が上手く使え...
-
Linuxプログラミングで、キーボ...
-
VisualStudio2019のコードアナ...
-
コマンドプロンプトからのEOFの...
-
Linuxで入力待ちなしkeyread関...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
プログラミングの問題です 「金...
-
Eclipseコンソール表示を、リセ...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
C言語scanf_sで何故か2回入力に...
-
Excel VBAで、Application.Inpu...
-
double型が正常に認識されてい...
-
cout関数を使っているのですが...
-
小数か整数かを判定する方法
-
WindowsでEOF
-
scanfが2回使えない・・・?;
-
C言語でgetchar();が上手く使え...
おすすめ情報