- ベストアンサー
C++ for文
C++を始めたばかりの初心者です。 課題がうまくいかないのでアドバイスください。 32から126までの95個の整数を一元配列に格納する。これらの整数値を文字型にキャストして、 10列の表形式で出力するプログラムを作成せよ。 ↓自分でやってみるとこうなりました。 #include <iostream> #include <cstdlib> #include <cmath> using namespace std; int main() { int i; int code[95]; char ch; for(i=0;i<=94;++i) code[i]=i+32; for(i=0;i<=94;++i) if((i+1)%10==0) ch='\n'; else{ ch=' '; //半角スペースです。 cout<<(char)code[i]<<ch; } return EXIT_SUCCESS; } うまくコンパイルできれば ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 ……と続いていくはずなんですが 自分の場合はコンパイルしても改行されず、10文字目が消えてしまいます。 (例えば「)」とか「3」が表示されません。) ch='\n';の行がおかしいという警告も出ています。 アドバイスお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
# 教えられた事を消化する能力も必要です cout や << や endlなどについて調べてみましたか? endl を coutに対して <<(出力ストリーム演算子)で出力すると改行してバッファにたまっていた物を表示させます どうして縦に並んでしまうのかを考えましょう char型の変数に対して 'endl' といった物を代入するのは変です char型には 'e'、'n'、'd'、'l'の1文字の定数なら格納可能です for ( i = 0; i < 95; i++ ) { // codeは無条件で出力なので cout << code[i]; // 10個目の出力か判断 if ( ( n + 1 ) % 10 == 0 ) { // 10個目だったなら改行 cout << endl; } else { // 10個目でない場合は スペースを出力 cout << " "; } } ご自分のコードと何処が違うか検討してみましょう # if節、else節などが何処までなのかを明示するために{ }を使うようにしましょう
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
cout を使うなら 改行には endlを使ってみましょう forループで codeの中身は無条件で出力 出力した個数が10個目のときendlを出力 スペースを出力 ループ先頭へ といった構成でしょう
補足
皆さん回答ありがとうございます。endlや{}などを変えてみたんですが コンパイルしてみると、改行されないで縦一列に表示されて、10文字ごとにeが付いてしまいます。 )e ←例えばこんな感じです。 #include <iostream> #include <cstdlib> #include <cmath> using namespace std; int main() { int i; int code[95]; char ch; for(i=0;i<=94;++i) code[i]=i+32; for(i=0;i<=94;++i){ if((i+1)%10==0) ch='endl'; else ch=' '; cout<<(char)code[i]<<ch<<endl; } return EXIT_SUCCESS; } もしよければもう少し教えてもらえないでしょうか…。
- chanfi
- ベストアンサー率37% (10/27)
C++ は未経験ですので、プログラムの流れのアドバイスだけ^^; 10 で割り切れるときは、 ch に改行コードを入れる それ以外は、 ch に空白を入れる その後、cout<<(char)code[i]<<ch; を行う。 という処理を行いたい場合、 cout<<(char)code[i]<<ch; はどこで処理するべきでしょうか? あと、コンパイルエラーは、{}が正しく閉じていないときにも 出ると思うので、{}がちゃんとなっているか確認するのもアリかもですね^^ 参考までに、、、 for(条件){ 処理 if(条件){ 処理 }else{ 処理 } 処理 }
お礼
{}をちゃんと入れられてませんでした。 おっしゃる通り見直しは必須ですね。 回答ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
そんだけわかってれば, プログラムをじっと見ればわかるはず. 表示してるのはどこですか? ところで, 最後は改行しなくていいの?
お礼
最後の改行をすっかり忘れてました。 回答ありがとうございます。
お礼
無条件で出力の意味をいまいち理解していませんでした。 {}は単文だといらないと思ってたんですがあったほうが わかりやすいですね。 おかげさまでなんとかうまくいきました。 丁寧な回答ありがとうございます。