• ベストアンサー

for文で配列を引数として

こんばんは。 for文で配列a[i][j]を引数として何らかの関数を呼び出すときがうまく動かないって事が起きてます。その関数にa[0][3]のように指定して動かすとうまく動くのですが・・・。 どうしてなのか分かりますか? for(i=0;i<=5;i++){ for(j=0;j<=6;j++){ ここで関数呼び出し; } } 抽象的な質問ですみません。

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

  • ベストアンサー
  • elder2
  • ベストアンサー率50% (3/6)
回答No.1

うまく動かないとは?どうなるのでしょうか? ・配列aにはきちんと値が入っていますか? ・i <= 5, i <= 6 ということは宣言はa[6][7]ですかね? この2点が大丈夫なら、原因は呼び出している関数にあるでしょう。 >抽象的な質問ですみません。 でしたらソースを載せれば良いじゃないですか~

Meza730
質問者

お礼

回答ありがとうございます。 使い方もままならないままに質問してしまいご迷惑おかけしました。ソース載せられれば良かったのですが。関数をもう一度見てみますね。 回答いただいたのに中途半端に打ち切ってしまい申し訳ありませんでした。

Meza730
質問者

補足

回答ありがとうございます。 配列には値は入ってます。宣言もa[6][7]となっています。 課題でスケジューラを作っていてソースが作りかけでかなり汚いですが載せてみます。突っ込みどころはたくさんあると思いますが、できるだけ、質問の点に絞り回答お願いします。呼び出しているのはseach_scheduleです。 概要は、 ・ai[6][7]にある年(2005)ある月(6)の日を代入しておく。 ・予定を線形リストにして保存しておく。 ・seach_scheduleは年月日を指定して線形リストを検索しその予定があれば1を返す関数です。 うまく行かない点は、 ・seach_scheduleで検索し、予定が入っていれば確認のためそこに文字列を表示させたいのですが表示されません。 以下ソース(VC++ ver.7.1)です。 ///////////////////////////////////////////////////////////////////////////// // // インクルードファイル // #include <windows.h> #include "stdafx.h" #include "schedule.h" #include "stdlib.h" #include "time.h" ///////////////////////////////////////////////////////////////////////////// // // 定数定義 // #define YES 1 #define NO 0 #define OK 1 #define NG 0 #define MAXLENTH 100 ///////////////////////////////////////////////////////////////////////////// // // プロトタイプ宣言 // LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM); //ウィンドウ関数 LPCSTR ClassName="Skelton"; //ウィンドウクラス名 ////予定リスト作成 void make_schedule(struct SCHEDULE **ptr,int icon, char memo[MAXLENTH],int year,int month,int day); void remove_schedule(); void edit_schedule(); int seach_schedule(struct SCHEDULE **ptr,int year1, int month1, int day1); void show_schedule(struct SCHEDULE *ptr); ////カレンダー作成 void cal(int year,int month); int leapyear(int yy); long _mjd(struct tm *date); void _jdate(long mjd, struct tm *date); long daycount(struct tm *from, struct tm *to); ///////////////////////////////////////////////////////////////////////////// // // グローバル変数 // HINSTANCE hInstance; //インスタンスハンドル ////予定リスト作成 struct SCHEDULE{ int sch_number; int sch_year; int sch_month; int sch_day; int sch_icon; char sch_memo[MAXLENTH]; struct SCHEDULE *sch_next; }; struct SCHEDULE *rootsch=NULL; struct SCHEDULE *ptr; ////カレンダー作成 int ai[6][7]; time_t timer; struct tm *t_st; int Y, M, D; struct tm date; char *_wday[7] = {"月","火","水","木","金","土","日",}; int _mday[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char *_day[31] = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15", "16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"};

その他の回答 (2)

回答No.3

原因については、他の方がおっしゃる通り、 それだけは特定できません。予想はつきますが。 とりあえず要所要所にprintfしてみましょう。 出力されたものから、どういう動きをしているのか考えてみて下さい。 プログラマ時代、私もそうやって解決したことが何度もあります。 多分、他のプログラマの方もそうやった経験があると思います。(・・・ありますよね??ね?ね?  …あって下さい…。) 参考になりますでしょうか?

Meza730
質問者

お礼

ありがとうございます。VC++でやっているもので確認の作業が難しくて・・・。 頑張ります。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

この情報だけではわかりませんが、 i,jの値が、配列のサイズを超えていませんか。 for(i=0;i<=5;i++){ for(j=0;j<=6;j++){ のとき、最大 a[5][6]の添え字になります。 配列が a[6][7]あれば、OKですが、 配列が a[5][6]の時は、配列のサイズをオーバーします。

Meza730
質問者

お礼

はじめはそこでつまずいていたんですが、今回はまた違っていて・・・。ありがとうございました。頑張ります。

Meza730
質問者

補足

すみません下の補足の続きを載せようと思ったのですが大きすぎて貼り付けられません。 中途半端ですし申し訳ないですが自分で頑張ることにします。回答ありがとうございました。お騒がせして本当に申し訳ありませんでした。