変数をループで扱う方法は?

このQ&Aのポイント
  • C言語の初心者が変数をループで扱う方法を教えてください。
  • 求めているのは、整数変数とループを同時に扱う方法です。
  • 少し冗長な書き方かもしれませんが、添え字のような雰囲気で操作したいです。
回答を見る
  • ベストアンサー

変数をループで扱うには??

C言語を最近勉強し始めたばっかりの初心者ですが、教えてください。 for文を用いたループ処理を使って、以下のことをやりたい場合、打開策があれば教えてください。 理想としては、(下手な書き方であることは100も承知なのですが・・) int i1,i2,i3,・・・・,; (添え字のような雰囲気の)整数変数と、カウント用の変数(例えば int count;)を用意して、 for (count = 1 ;(略);count++)などとして、forのブロック内に『気持ちとしては』、 int(count) = (略) としたいのです。何というか、添え字(正確に言えば全く添え字ではないのですが)とループを同時に扱いたいのです。 この、「添え字のように扱う」という方法・技術があれば、教えてください。お願いします。 「そんな書きかたをせずにこうすれば・・・」っていうのはわかっているんですが、気分的にもスッキリしたいので、回答のほど、お願いします。

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

  • ベストアンサー
  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.1

非常に分かりにくい・・・ int countと宣言してint(count)ってのは何じゃ? それでやりたい事は変数を連番付きで宣言して、 その連番を基にループで回せないかということだと思いますが・・・ 上記は文意から曲解しましたが(過去に私も同じことを考えたことがある) 結論はそのような方法はありません。 おそらく変数名を直接分解して操作できる言語はないと思います。 なんというか、配列というものがあるのに、 それを避けて、わざわざコンパイル技術を複雑にすることもないでしょう。

ooi2-23
質問者

お礼

とてもわかりやすい、しかも知りたい内容が明確な文章での回答、ありがとうございます! なるほど、そういわれれば、変数を直接分解するのは逆に複雑ですよね。 というか、配列っていう便利なものがあることに気づきませんでした・・(^^; int[count]=(略) でコンパイル・実行してみたところ、自分の思うように扱うことができるようになりました! 添え字≒配列 で考えればよかったんですかね・・?? とにかくありがとうございました。本当に感謝です。

関連するQ&A

  • 変数の名前をループで

    $hoge1 $hoge2 $hoge3 という変数があるとします。 そしてこの変数の中身の数のカウントを1回のループで行いたくて下のようなスクリプトを書きました。 $j=0 for($i=0; $i<3; $i++) { $j++; $aaa='$hoge' . $j; $cnt=count($aaa); print $cnt; } しかしこれだと$task1、$task2、$task3という文字列になってしまい、count関数を使っても1が出力されるだけにしかなりません。 "変数"として認識させることは可能でしょうか?

    • ベストアンサー
    • PHP
  • ループの正誤

    金種表のソースを書きました。 表示ループのif文(枚数0枚の場合表示しない)を実行しない場合は 正確の結果が出てくれるんですが、 このまま実行したら、たとえば引数は222の場合は 実行した結果は 「100円 2枚」、10円と1円の枚数を表示してくれなっかです。 原因を教えて頂けますか? ループのどこが間違えたのがわかりません… import java.io.*; public class ex1 { public static final int[] YEN_TYPES = {10000,5000,1000,500,100,50,10,5,1}; public static int[] getYenCount(int yen, int[] yentype) { int[] count = new int[yentype.length]; for (int i = 0; i < yentype.length; i++) { count[i] = yen / yentype[i]; //商 yen = yen % yentype[i]; //剰余 } return count; } public static void main(String args[]) throws IOException { int yen = Integer.parseInt(args[0]); int[] count = getYenCount(yen, YEN_TYPES); for (int i = 0; i < YEN_TYPES.length; i++) { if(count[i] == 0) { i++; }else{ System.out.println(YEN_TYPES[i] + "円\t" + count[i] + "枚"); } } } }

    • ベストアンサー
    • Java
  • マルチスレッド内のループについて

    こんにちは。 開発環境は VC++6.0 SDI マルチスレッドがあり、2つの処理を行う関数が書かれています。 このスレッドはダイアログボックスに配置したストップボタンを押すとフラグFALSEになりループを終了させます。 2つの関数は、int型の整数を引数にして、処理を行います。 整数はある値に達すると 0 になり永遠にループを続け、2つの処理を行います。 と言う意味合いでプログラムを書きました。(書いたつもりです) (1)この書き方ですと、for内のループが動いている時に、右上の×ボタンでダイアログを閉じると [Debug Assertion Failed!]と言う警告文が出て強制的に終了してしまいます。 ストップボタンを押してもcount=10になるまではループしています。(当然ですが・・。) そもそもマルチスレッドの中にこのような形でfor文を入れるのは間違っているのでしょうか? どのような書き方にすれば良いのでしょうか? よろしくお願い致します。 bool m_flags;//スレッド内の処理を続けるか示すフラグ UINT CabcDlg::thread(LPVOID pParam)// { CabcDlg *pInst = (CabcDlg *) pParam; while(pInst->m_flags){//ストップボタンが押されると終了する。 for (int count = 0; count<10; count++ ) { pInst->OnSend(count); //処理A pInst->OnReceive(count);//処理B } } return 0; }

  • perl:ループのカウンタ変数の値を保持したい。

    While文のループのなかにfor文でループをまわしているスクリプトなのですが、 forの中でカウンタ変数をつくり、ループ回数を計測しております。 またforの中である条件を満たした際に、lastでforを抜け、引き続きWhileのループを継続するという処理をしております。 $i=0; While(○○){ 処理1    for(××){ 処理2 $i++;      if($i >=100){  処理3       last; } } } ここで、一度for文のif文で一度forループを抜け、Whileでループをし、またforループに突入した際に、前回forループでカウントした$iの値を保持したまま、そのつづきから$iのカウンタを動作させたいのですが、$iの値はforループを抜けるとリセットしてしまいます。 このような場合、どうすれば$iの値を保持できますでしょうか。 お詳しい方、宜しくお願い致します。 ※ネストがうまく表現できず、みずらくてスミマセン。

    • ベストアンサー
    • Perl
  • forループに慣れるには

    初めまして。 今資格を取ろうと思い独学でJavaを勉強してるんですが、 つまらない部分でつまずいています。 それは少々複雑なfor等のループです。 変数を追っていくうちにこんがらがってしまい、 変数の正しい値を見失ってしまいます。 例えば… Loop: for(int i = 0; i<5; i++) { for(int j =0; j<5; j++) { if(i==j) continue Loop; System.out.println("i = " +i+ "j = " +j); if(i > 3) break Loop; } } や、 int i,j; for(i = 0, j = 0; i<3;) { if(i++ == 2 || j++ == 2) break; } System.out.println(i); System.out.println(j); の様なループです。 試験範囲は大方勉強出来てるんですが まぬけな事にループがイマイチ理解出来てなくて(恥) 皆さんはどうやって慣れてこられましたか? つまらない質問ですが何か良いコツやアドバイスがあれば よろしくお願いします。

  • 【C言語】二重forループ内でscanfを使ってchar型変数に数値(

    【C言語】二重forループ内でscanfを使ってchar型変数に数値(%d)を入力すると、きちんとループ処理されないのはなぜ? プログラムを下に用意しましたのでご覧下さい。 二重forループ内で入力を繰り返すプログラムです。 ついでに i j の値を出力するようにしました。 -----------------プログラム---------------- int main (void){ char input = 0; // 入力値 char型にするとforループでインクリメントエラー(int型にすると問題ない) int i = 0, j = 0; , printf("数値を入力して下さい。('-1' で入力終了)\n"); for( i=0 ; i<3 ; i++ ){ // i がちゃんとインクリメントされない for( j=0 ; j<3 ; j++ ){ scanf("%d", &input); // char 型変数に %d で入力すると、i がきちんとインクリメントされない printf("[i][j] = [%d][%d]\n", i, j); if( input == -1 ){ printf("入力を終了します。\n"); break; } } if( input == -1 ) break; } return 0; } ---------------------------------------- ---------実行結果(入力値はchar型)--------- 数値を入力して下さい。('-1' で入力終了) 1 2 3 4 5 6 7 8 9 [i][j] = [0][0] [i][j] = [0][1] [i][j] = [0][2] [i][j] = [0][0] [i][j] = [0][1] [i][j] = [0][2] [i][j] = [0][0] [i][j] = [0][1] [i][j] = [0][2] -1 [i][j] = [16777215][0] 入力を終了します。 ---------------------------------------- ----------実行結果(入力値はint型)---------- 数値を入力して下さい。('-1' で入力終了) 1 2 3 4 5 6 7 8 9 [i][j] = [0][0] [i][j] = [0][1] [i][j] = [0][2] [i][j] = [1][0] [i][j] = [1][1] [i][j] = [1][2] [i][j] = [2][0] [i][j] = [2][1] [i][j] = [2][2] ---------------------------------------- ご覧の通り、char型変数に値を入力しているために、forループで i がきちんとインクリメントされません。 入力値は -128~127 の値しか想定していないので、メモリの消費を少しでも抑えようと思いchar型で宣言したのですが、思わぬ所でおかしな挙動が起こってしまいました。 int型で宣言すればいいだけなのですが、なぜこんな挙動になるのか知りたいです。 よろしくお願いします。

  • 配列を使わずに、変数名を動的にループで回したい

    配列を使わずに、変数名を動的にループで回したい 大学の課題をやっている途中に思ったことなのですが……。 プログラム中に同じ型の変数p1,p2,p3があり、それぞれの変数にループで同じ処理を施したいと思っています。 しかし、「p(i)」や「("p" + i)」などと、変数どうしを別のものとして認識させようとしても、コンパイラから警告が出て上手くいきません。 配列を使えば、このような処理が出来ることはわかるのですが、使う変数名を指定されてしまっているために、今回は配列を使えません。 出来るか出来ないか、出来る場合は方法を知りたいです。 後、今回はC言語のプログラムで利用出来るかが自分にとっての問題なのですが、C言語以外のこのプログラミング言語なら出来る、とかの情報もこの機会に知りたいです。 お答え出来る範囲でいいので、もしよければ回答お願いします。

  • 3次元配列のループによる比較の回数を減らす

    以下は正の整数が入った3次元配列form[30][20][8]で、中身が一致している2カ所に-1を代入してループを抜けるというプログラムの一部分なんですが、無駄なループを減らすにはどういった変更をすればいいでしょうか? form[30][20][8]は変更しない方向でお願いします。 check: for(int i=0;i<30;i++){ for(int j=0;j<20;j++){ for(int k=0;k<8;k++){ for(int l=0;l<30;l++){ for(int m=0;m<20;m++){ for(int n=0;n<8;n++){ if(form[i][j][k]==form[l][m][n]&&!(i==l&&j==m&&k==n)form[i][j][k]!=-1) count++; form[i][j][k]=-1; form[l][m][n]=-1; break check; } } } } } } }

    • ベストアンサー
    • Java
  • intやshortやcharの変数確保時間

    for文などでよく一時変数に for ( int i=0; ・・・ とか for ( short s=0; ・・・ とか for ( char i=0; ・・・ みたいに整数型の変数が使われます。 確か変数の表せる範囲は long>int>short>char だったと思うのですが、変数を確保する時間やメモリサイズに違いはあるのでしょうか? たとえばlong型変数を10万個確保する時間とintとかshortとかcharのそれ とは違いがあるのかなぁと疑問に思いました。

  • 変数の型について

    お世話になります。 Oracle11gと .NET C#で開発をしております初心者です。 オラクルから得たデータをSPREADに表示しており、 そして、表示した表の「合計」列で0より大きい数字のセル に色を付けようとしているのですが、 実は、データの中身は違うのですが、表形式が全く同じ シートがsheet2からsheet5まで全部で5枚有り、下記の 様な記述を1回で済ませたいと思っており、sheet1の部分を 変数化してfor{ }でループさせようとしたのですが、 変数化させる型が分かりません。 stringの変数でやろうとしたらエラーになりました。 どなたかご親切な方、ご教示頂きたく宜しくお願い致します。               記 int gouKei = Spread.FindColumnIndex(sheet1, "合計");   for (int i = 0; i < sheet1.Rows.Count; i++)     { if (int.Parse(sheet1.Cells[i, gouKei].Text) > 0) {         sheet1.Cells[i, gouKei].BackColor = Color.LightCyan;       }     }

専門家に質問してみよう