• 締切済み

【C#】ループ文について

いつもお世話になります。 C#に関して質問です。 VisualC#2008 を使用しています。 以下のようなプログラムを書いているのですが、for文内で配列に文字列を代入しているはずなのに、for文を出ると配列に文字列が代入されていないようなのです。 これはどうしてなのでしょうか? 誰か説明のほどよろしくお願いします。 string[] kari3 = new string[300]; int kari3_co = 0; if (i == 0) { for (int x = 0; x > 50; x++) { string dat2 = this.dataGridView1[x, 0].Value.ToString(); kari3[kari3_co++] = dat2; int y = 0; } string dat3 = string.Join(",", kari3); MessageBox.Show(dat3); }

みんなの回答

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

if (i == 0) ・「i」の値が判らないので、Trueじゃ無いかもしれない。 for (int x = 0; x > 50; x++) ・「x=0」 なので、「x > 50」は絶対にFalse。ループは回らない。 ・「for (int x = 0; x <= 50; x++)」なら回る。

関連するQ&A

  • char型配列をint型に代入するには

    char型の配列(文字列)の各要素ににそれぞれ数字が一つ入れました。 str[0] = '0' str[1] = '1' : str[5] = '5' これをfor文を使ってint型変数に入れたい代入するにはどうれればいいですか? str[0] → dat1 str[1] → dat2 : str[5] → dat5

  • C# 列の挿入

    どうしてもわからないことがありまして,datagridview上に列を追加しようとすると, 「列のFillWeght値の合計が65535を超えることはできません」 というエラーが出ます.追加する列数は8760列ですが,このエラーは列数が65535列を超えている? ということなのでしょうか? どうにも解決できないので,どなたかご教授願えないでしょうか? dataGridView1.Columns.Add("clmName1", "日付"); for (int n = 0; n < 8760; n++) { String ss1 = String.Format("Time{0}", n); String ss2 = String.Format("データ{0}", n); this.dataGridView1.Columns.Add(ss1, ss2); }

  • 【C#】二次元配列へのcsvファイルの格納について

    いつもお世話になってます。 C#に関して質問です。 VisualC#2008を使用しています。 二次元配列の中にcsvファイルの内容を格納したいと思っています。 一次元配列だと、split(',')のようにコンマで区切って格納することができたのですが、 二次元配列になるとうまくいきません。 作成中のプログラム(一部)は下記のようになっています。 二次元配列になっても、csvファイルをうまく格納できる方法を誰かおしえていただけないでしょうか? よろしくお願いします。 private void 問題ファイルを読み込むXToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { System.IO.Stream stream; stream = ofd.OpenFile(); //StreamReaderオブジェクトの作成 StreamReader sr = new StreamReader(stream, Encoding.GetEncoding(932)); string dat; //文字を入れる while ((dat = sr.ReadLine()) != null) { sbuf = dat.Split(','); //エラー箇所 //DataGridViewに新しい行を追加 int r = dataGridView1.Rows.Add(); dataGridView1[0, r].Value = sbuf[mondai_count,0]; dataGridView1[1, r].Value = sbuf[mondai_count,1]; dataGridView1[2, r].Value = int.Parse(sbuf[mondai_count,2]); //Parseで文字列を数値に変換 } //visible=False でDataGridView非表示 mondai_bun[0] = sbuf[mondai_count,0]; mondai_title[0] = sbuf[mondai_count,1]; mondai_bun2.Text = mondai_bun[0]; this.mondai_list.Items.Add(mondai_title[0]); //ファイルを閉じる sr.Close(); stream.Close(); } }

  • シーザー暗号(C言語)

    シーザー暗号というものを作ろうとしていますが、文字のずらし方がわからず詰まっています。 手順は一応考えてあります。 (1)入力された文字を配列input[301]に代入 (2)何文字ずらすかを指定してその数値を変数countに代入 (3)入力された文字の長さを変数lenに代入 (4)inputとcountとlenを、文字をずらしてそれをoutputに返す関数shiftに渡す (5)outputを表示する のような感じですが、肝心の文字のずらし方がわかりません。 JISコードを使ってやるといいと聞いたんですが、そのやり方がわかりません。 ソース↓ #include <stdio.h> #include <string.h> int shift_char(char x[], int y, int z) { int i; for(i = 0; i <= z; i++) { x[i] = x[i] + y; } return x; } int main(int argc, char* argv[]) { char input[301]; char output[301]; int count, len, i; printf("文字を入力してください: "); scanf("%s" ,input); printf("何文字ずらしますか: "); scanf("%d" ,count); len = strlen(input); output = shift_char(input, count, len); for(i = 0; i <= len; i++) { printf("%s" ,output[i]); } return 0; } よろしくお願いします。

  • ArrayIndexOutOfBounds例外

    ArrayIndexOutOfBoundsExceptionのバグが発生しています。 下記コードで、どうして上記のバグが発生するのか不明で困っておりますので、お分かりの方がいらっしゃったら、ぜひお教えください。 Dataクラスというクラス内に次のようにコードを書いています。 //全部で何問か。 static int x; //x行10列の配列の生成。 static String[][] questionArray = new String[x][10]; //要素数xの重複がない0から166までの乱数の生成。 static int[] getrandomNo(){ int[] no = new int [x]; for(int i=0; i<x; i++){ int j; do{ j=0; no[i]=1+rand.nextInt(166); for(; j<i; j++) if(no[j] == no[i]) break; } while (j<i); } return no; } //167行10列のString型二次元配列tから、x行分抜き出しランダムに構成。 static String[][] getquestionArray(){ int []ra = getrandomNo(); for(int i=0 ;i<x ; i++) for(int j=0; j<10;j++) questionArray[i][j] = t[ra[i]][j];  return questionArray; } //上記の二次元配列を変数qAに代入。 static String[][] qA = getquestionArray(); これを、別のTestクラスからアクセスします。 //klabel1にqAの5行5列目の文字列を表示。   klabel1.setText(Data.qA[4][4]); ここで上記のArrayIndexOutOfBoundsExceptionが出るようなのです。 どこで問題が発生しているのかわからず、困っています。 お分かりの方、ぜひご教授ください。

    • ベストアンサー
    • Java
  • C側で得た変数をC++の変数に流し込みたいです。

    C側で得た変数をC++の変数に流し込みたいです。 現在、C++で 次のように、 入力ストリームから1行分の文字列を読み込んで、 読み込んだ文字列を「cmd」に流し込んだ際に、 cmdに代入された文字列が「get」であると、 他のファイルで定義されている「doget」という関数が 実行されるようになっています。 ----------- std::string cmd; std::getline(cin, cmd); void nod::execute(const std::string& cmd) { std::stringstream ss(cmd); std::string command; ss >> command; if (command == "get") { std::string key = "baseball" ; std::string val = stand.doget(key); } } ----------- これを、 以下のように、 (1) C言語側にある「a」という変数にある値を C++側のkeyに流しこんで、 (2) また、C側にあるsign配列内の文字列を C++側の「cmd」に代入したいと思っています。 C側 --------- /* C側の「a」配列の値を、上記C++側の「key」に代入したい */ char a[] = "www.gehohogetest.jp"; /* 上記C++側の「cmd」変数に、C側の配列で定義されている"get"という文字列を代入したい */ char sign[]= "get"; --------- その場合、C側とC+側をどう記述すれば、 希望を叶えることが出来るでしょうか。 アドバイスいただけるとありがたいです。 以上どうぞ宜しくお願い致します。

  • Visual C++で

    VisualC++を使って、ファイルにint型の二次元配列を書き込みたいのですが、WriteFile関数を使えばよいのかな?というところまではわかったのですが、二番目の引数を"int"型から"LPCVOID"型に変形できませんと言われてしまいます。 雰囲気的には下のような感じになるのかなぁー、と思いましたが、わかりません。教えてください。お願いします。 fp = CreateFile("test.dat", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); for(i = 0; i < 100; i++){ for(j = 0; j < 100; j++){ WriteFile(fp, array[i][j], sizeof(array), &dwRote, NULL); } }

  • 【C# DataGridViewについて】

    C#であるWindowsFormアプリケーションを作っているのですが imagelistに格納されている画像群をDataGridViewで表示しようと for (int y = 0; y < gy; ++y) { DataGridViewRow row = new DataGridViewRow(); for (int x = 0; x < gx; ++x) { DataGridViewImageCell imageCell = new DataGridViewImageCell(); imageCell.Value = imageList.Images[y * gx + x]; row.Cells.Add(imageCell); } dataGridView1.Rows.Add(row);//ここが問題 } としたところ、印をつけたところで、「System.InvalidOperationException」 なる例外が発生し、止まってしまいました。(デバッグで実行時) エラーの詳細を見ると、「空のDataGridViewに行を追加することはできません」 と書いてありました。 仕方なく列を追加する形にしようとしても、CellsがDataGridViewColumnにはないからImageCellをColumnにAddできないし、困っています。 どうすればよいでしょうか?

  • 多元配列について(ANSI C)

    動的多元配列で、 Voidポインタに、多種の型がぶら下がった多元配列を作り、 読み書きをしたいのですがどのようにしたらよろしいでしょうか。 具体的には、 x[0][1]は、intで「2」が入っている x[0][4]は、intで「9」が入っている x[1][2]は、charでしかも文字列の配列で「goo」が入っている x[1][5]は、charでしかも文字列の配列で「教えて」が入っている x[0]は、int型の配列。X[1]は、文字列型の配列。 というようなものです。 一応ソースは作ってみたのですが、int型では問題なくいくのですが、 文字列は、コンパイルはできますが、実行すると予期せぬことが起きます。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main (void) {      void **topPointa;      int * iDataInput;      int * iDataOutput ;      char * chDataInput;      char * chDataInput2;      char * chDataOutput1 ;      // ポインタアドレス用のメモリ確保      topPointa = (void *) calloc (10 , sizeof(void *));      if(topPointa == NULL) {           printf("メモリが確保できません\n");           exit(-1);      }      //int配列のメモリ確保      iDataInput = (int * ) calloc (10 , sizeof(int));      if(iDataInput == NULL) {           printf("メモリが確保できません\n");           exit(-1);      }      iDataInput[0] = 3 ;      iDataInput[1] = 4 ;      topPointa[0] = (void * ) &iDataInput;      //int配列の取り出し      iDataOutput = *(int *) topPointa[0];      printf( "int: %d\n", iDataOutput[0] );      printf( "int: %d\n", iDataOutput[1] );      //char配列 のメモリ確保      chDataInput = (char * ) calloc (10 , sizeof(char *));      if(chDataInput == NULL) {           printf("メモリが確保できません\n");           exit(-1);      }      chDataInput2 = (char * ) calloc (10 , sizeof(char));      if(chDataInput2 == NULL) {           printf("メモリが確保できません\n");           exit(-1);       }      strcpy(chDataInput2 , "hoe");      chDataInput[0] = &chDataInput2;      topPointa[1] = (void * ) &chDataInput;      //char配列の取り出し      chDataOutput1 = *(char *) topPointa[1];      printf( "char: %S\n", chDataOutput1[0] );      free(iDataInput);      free(chDataInput);      free(chDataInput2);      return 0; } 言語は、C言語ANCI Cでお願いします。 以上。よろしくお願いします。

  • C#からC言語で作成したDLLに文字列の配列の受け渡しをする方法を教えて下さい

    初めまして、プログラミング自体経験が初心者なので根本的なところで間違っているかもしれませんがご指摘いただければと思いまして投稿します。 C#のプログラムからC言語で書かれたDLLを使いたいのですが、いくつか分からないことがあります。1つは文字列の配列の受け渡し方法、もう1つはその配列要素の文字列がマルチバイト文字である場合の方法です。 C#側 using System; using System.Runtime.InteropServices; public class MainClass { [DllImport("Cmdll.dll")] public static extern void SampleMethod([In, Out] string[] s, int x); static void Main() {     string[] str1 = new string[2] {"月曜日", "火曜日"};     SampleMethod(str1, n);     for (int i = 0; i < n; i++)       Console.WriteLine("str1[{0}] = {1}", i, str1[i]);   } } C言語側 void __declspec(dllexport) SampleMethod(char *str[], int n) {   int i;   for (i = 0; i < n; i++)     strcat(str[i], "ですね"); } なお、私用する文字を1バイト文字にすると動作しました。 DllImportの使い方も付け焼刃なので使い方が間違っていたらご指摘願えますでしょうか。よろしくお願いいたします。環境はVisual Studio 2008です。