• ベストアンサー

C++ for文

chanfiの回答

  • 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
質問者

お礼

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

関連するQ&A

  • 配列の練習問題

    #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++で分からないプログラムがあるんですが

    #include <iostream> #include <cmath> using namespace std; int main() { static const int N = 2; double va[N]={3,-4}; double vb[N]={4,3}; double a,b; double p; for (int i = 0; i < N; ++i) { for (int i = 0; i < N; ++i) { } } cout << "va + vb = (" ; for (int i = 0; i < N; ++i) { cout << va[i] + vb[i]; if (i < N - 1) { cout << ", "; } } cout << ")" << '\n'; cout << "va - vb = (" ; for (int i = 0; i < N; ++i) { cout << va[i] - vb[i]; if (i < N - 1) { cout << ", "; } } cout << ")" << '\n'; p = 0; for (int i = 0; i < N; ++i) { p += va[i] * vb[i]; } cout << "va・vb = " << p << '\n'; a = 0; for (int i = 0; i < N; ++i) { a += va[i] * va[i]; } a = sqrt(a); b = 0; for (int i = 0; i < N; ++i) { b += vb[i] * vb[i]; } b = sqrt(b); if (a * b != 0) { cout << "cosθ = " << p / (a * b) << '\n'; } return 0; } これで、ベクトルの加減とベクトルの内積とcosθが出るんですが、2つのベクトルを適当に初期化しないといけないんですが、初期化ってこれで初期化ってできてますか?

  • strcat で型が合わない

    #include <iostream.h> main(){ char x[15]; for(int i=0;i<15;i++) x[i]=i+49; for(int i=0;i<15;i++){ cout <<x[i]; }; } 9より先の文字化けは考えないとして、 char x[15]; というのは適切ですか? 16個目の要素になる x[15] には、文字列の最後の \0 が入ると思って char x[14]; にしなかったんです。 コンパイルして実行すると 123456789... となるけど、 2桁にしたいんです。半角スペースを使いたいんです。 1 2 3 4 5... のようにしたいんです。 そのように表示する方法は色々あるけど、 文字列の配列でやる場合の方法が知りたいんです。 #include <iostream.h> main(){ char x[15]; char y=" " for(int i=0;i<15;i++){ x[i]=strcat( y,(char)(i+49) ); }; for(int i=0;i<15;i++){ cout <<x[i]; }; } ↑のようなことやってみたけど、型が合わないとかで うまくできませんでした。 strcat とか strncpy は難しいです。 正しいソースを教えてください。

  • c++での入出力がうまくいきません;

    初心者ですが独習c++でプログラミングについて勉強している者です。 なんとか環境設定もできたと思いきや、うまくコンパイルすることができなくて困っています。具体的には、 #include <iostream> using namespace std; int main() { int i, j; double d; i = 10; j = 20; d = 99.101; cout << "値を表示: "; cout << i << ' ' << j << ' ' << d; return 0; } という値を表示するプログラムではコンパイルもうまくいったのですが、次の #include <iostream> using namespace std; int main() { int i; cout << "値を入力: "; cout >> i; cout << "入力した値: " << i << "\n"; return 0; } という入力のプログラムをコンパイルしようとすると、コマンドプロンプトに演算子が使われたクラス ostream では int型の定義が存在しないとなりコンパイルエラーとなってしまいます。 理由が考えてもわからないので、質問してみました。 どのようにすれば、このエラーを解消できるのか知りたいので、どうかご意見をよろしくお願いします。

  • コマンドラインから引数を渡したいのですが・・・

    VC.NETで参考書に載っていた下のようなコードを書きました。 #include <iostream> #include <cstdlib> using namespace std; int main (int argc, char *argv[]) { int sum; if (argc != 3) { cout << "引数の個数が違います。"; return 1; } sum = atoi (argv[1]) + atoi (argv[2]); cout << "合計=" << sum << '\n'; return 0; } しかしながら、引数の個数が違います。としか出力されません。どうすればよろしいでしょうか?

  • C++の関数テンプレートで分からないところがあります。

    C++の関数テンプレートで分からないところがあります。 C++の入門書を読んで勉強しているのですが、その演習問題(答えはついてないです)で、以下のような問題がありました。 ----------------------------------------------------- 配列の全要素の最小値を求める関数テンプレートを作成せよ。 teplate <class Type> Type minof(const Type x[], int n); という形で作ること。 なお、最も小さい文字列を求められるようにするために、const char *型に明示的に特殊化したものも合わせて作成すること。 ------------------------------------------------ という問題なのですが、これにたいして僕は以下のように答えました。ヘッダのインクルードなどは省きます。 template<class Type> Type minof(const Type x[], const int n) {     int min = 0;     for(int i = 1; i < n; i++)         if(x[min] < x[i])             min = i;     return x[min]; } template<> const char* minof<const char *>(const char x[][64], const int n) {     int min = 0;     for(int i = 1; i < n; i++)         if(strcmp(x[min], x[i]) < 0)             min = i;     return x[min]; } int main() {     const int n = 5;     int a[n];     char s[n][64];     for(int i = 0; i < n; i++){         cout << i + 1 << "番目---";         cin >> a[i];     }     cout << "文字列\n";     for(int i = 0; i < n; i++){         cout << i + 1 << "番目---";         cin >> s[i];     }     cout << "整数の最小値---" << minof(a, n) << "です\n";     cout << "文字列の最小値---" << minof<const char *>(s, n) << "です\n"; } これをコンパイルすると、エラーで 明示的な特殊化; 'const char *minof<const char*>(const char [][64],const int)' は関数テンプレートの特殊化ではありません と 'minof' : 1 番目の引数を 'char [5][64]' から 'const char *const []' に変換できません。 とでてしまいます。 色々探してみたのですが、解決できませんでした・・。 特に最初のほうのエラーがよくわかりません。ちゃんと特殊化してる気はするのですが・・。 間違っている箇所の正当を載せていただけるとわかりやすくて、ありがたいです。 よろしくお願いします!

  • アドバイスお願いします

    二つの顔文字を横移動しながら交互に変換したいんですけど 横移動しながら変換できるようにはなったんですけど 一番最初に顔文字が残ってしまい不自然なんですけどどうすれば消えるでしょか?アドバイスお願いします #include<iostream> using namespace std; int main() { int i,k,t; char str[] = "(~~)"; char str2[] = "(<>)"; for(i = 1; i < 10; i++){ cout << " "; for(k = 0; k < i; k++){ cout << " "; } for( t = 0; t < 2000; t++ ) if( i % 2 == 0 ){ cout << str; cout << '\r'; }else{ cout << str2; cout << '\r'; } } cout << "\n"; return 0; }

  • 単純挿入法を入れたいんですけど・・・

    #include <iostream> #include <iomanip> #include <cstdlib> //rand関数を使うので using namespace std; void Sort(int *s, int n); //プロトタイプ int main() { const int N = 100; int a[N], i, r, temp; for(i = 0; i < N; i++) a[i] = i; for(i = 0; i < N; i++){ r = rand() % N; temp = a[i]; a[i] = a[r]; a[r] = temp; } cout << "整列前\n----\n"; for(i = 0; i < N; i++) cout << setw(4) << a[i]; cout << '\n'; Sort(a, N); cout << "整列後\n----\n"; for(i = 0; i < N; i++) cout << setw(4) << a[i]; cout << '\n'; return 0; } void Sort(int *s, int n) { //この部分を補って完成させること }

  • C++で,配列に計算した値を入れたいです.

    C++で疑似乱数を発生させてサイコロをつくったのですが, サイコロを5回転がしたときのそれぞれの値をソートしたいと思い,配列に入れれば簡単だと考えてとりあえず配列に入れるプログラムを書いてみました. しかし,int array[i] = Dice(); のところでエラーが出てしまいます. ローベルのC++入門講座という本を使って独学で勉強している初心者なため,配列の使い方がいまいちよくわかりません. ご教授よろしくお願いします. 以下ソースコード #include <iostream> #include <cstdlib> #include <ctime> using namespace std; void InitRand(){ srand((unsigned int) time (NULL)); } int Dice(){ return rand() % 6 + 1; } int main(void){ int n = 0; //nはサイコロを転がす回数 cout <<"サイコロを何回転がしますか?" << flush; cin >> n; cout << "回転がします" << endl; InitRand(); for(int i = 0; i < n; ++i){ cout << Dice() << endl; int array[i] = Dice(); //エラーが発生する.i回目のサイコロの値をi番目の配列に入れたい. } }

  • C++ の while ループ

    C++の基本学習者です。Windows 10 で Visual Studio Community 2015 を使っています。 教本に載っている、機械語のプログラムをC++でシミュレーションする、というものを作ろうと、途中まで下のようなコードを書き込み、そこまで間違いがないかを確かめるために、コンパイルして実行したら、添付の写真のようなエラーメッセージが出てきました。 // ConsoleApplication65.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" #include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> #include <cmath> #include <cstring> using namespace System; using namespace std; int main() { // variables int program = 0; int accumulator = 0; int count = 0; int instructionRegister = 0; int operationCode = 0; int operand = 0; int location[100]; cout << "*** Welcome to Simpletron ***" << endl; cout << "*** Please enter your program ***" << endl; cout << "*** one instruction at a time,***" << endl; cout << "*** after the location number and and the prompt of '?' ***" << endl; cout << "*** To stop entering instructions, ***" << endl; cout << "*** enter -9999 . ***" << endl << endl; cout << setfill('0') << internal; cout << setw(3) << count << " ? "; cin >> program; while (program != -9999) { location[count] = program; count++; } return 0; } while ループに問題がありそうですが、コンパイルはちゃんとできたのに、何が悪いのでしょうか? 詳しい方、どうぞ教えてください。お願いします。