• ベストアンサー

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';の行がおかしいという警告も出ています。 アドバイスお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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節などが何処までなのかを明示するために{ }を使うようにしましょう

noname#63549
質問者

お礼

無条件で出力の意味をいまいち理解していませんでした。 {}は単文だといらないと思ってたんですがあったほうが わかりやすいですね。 おかげさまでなんとかうまくいきました。 丁寧な回答ありがとうございます。

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

cout を使うなら 改行には endlを使ってみましょう forループで codeの中身は無条件で出力 出力した個数が10個目のときendlを出力 スペースを出力 ループ先頭へ といった構成でしょう

noname#63549
質問者

補足

皆さん回答ありがとうございます。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)
回答No.2

C++ は未経験ですので、プログラムの流れのアドバイスだけ^^; 10 で割り切れるときは、 ch に改行コードを入れる それ以外は、 ch に空白を入れる その後、cout<<(char)code[i]<<ch; を行う。 という処理を行いたい場合、 cout<<(char)code[i]<<ch; はどこで処理するべきでしょうか? あと、コンパイルエラーは、{}が正しく閉じていないときにも 出ると思うので、{}がちゃんとなっているか確認するのもアリかもですね^^ 参考までに、、、 for(条件){ 処理 if(条件){ 処理 }else{ 処理 } 処理 }

noname#63549
質問者

お礼

{}をちゃんと入れられてませんでした。 おっしゃる通り見直しは必須ですね。 回答ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そんだけわかってれば, プログラムをじっと見ればわかるはず. 表示してるのはどこですか? ところで, 最後は改行しなくていいの?

noname#63549
質問者

お礼

最後の改行をすっかり忘れてました。 回答ありがとうございます。