質問: %1.14lf\n",k,hz[k]);*/ fprintf(fp,"%1.14lf\n",hz[k]); } /*if((fp=fopen("denkai","w"))==NULL) exit(2);*/ for(k=0;k<=j;k++){ ey[k]=ey[k]+(dertat*(hz[k+1]-hz[k]))/(dertax*eps1); /*fprintf(fp1,"%1.36lf\n",ey[k]);*/ } まだプログラムの途中ですがnを1000回に設定してjを99に設定しているのに nが510回めになるとif((fp=fopen("jikai","w"))==NULL){ printf("磁界あきません。n=[%d] hz[%d]\n",m,k);exit(1); の制限がかかりとまってしまいます。hzは99までしかいかないはずなのに nが510回目になると勝手にないはずのhz[100]計算してしまいとまります。 原因がわかりませんので詳しく教えていただけませんか?あとFILEの 書き込みについてのやり方も教えてください。よろしくお願いします。
回答: 他の方と回答が重複している部分もあるかと思いますが. ソースを実際に検証したわけではありません. --> for(m=1;m<=n;m++){ ..... if((fp=fopen("jikai","w"))==NULL){ printf("磁界あきません。n=[%d] hz[%d]\n",m,k);exit(1); } ... } <-- ここで、ループするたびに、ファイルを新たに開いている事に なるので、「ファイルの開きすぎ」を起こしているのでは ないでしょうか?? 開いたら(fopen)、閉じる(fclose)のが原則なのですが このプログラム上で --> /* fprintf(fp1,"%1.36lf\n",ey[k]);*/ fclose(fp); /* 追加 */ } <-- と単に書いただけだと、fopen した瞬間に今まで書き込んだ データはパァになってしまいます. なので、fopen は for ループの中ではなく、ループに入る前に 行い、ループを抜けた後に、fclose すればよいのではないでしょうか?? (ループの中で、fopen をしたい意図があるのかもしれませんが...) こんな風に書き換えてみるとうまくいくのでは. --> if((fp=fopen("jikai","w"))==NULL){ printf("FILE OPEN ERROR",m,k);exit(1); } for(m=1;m<=n;m++){ ...... ..... } fclose(fp); <-- === hz[100] というのは、エラーメッセージ(fopen の失敗の時)で 表示されているのでしょうか?? だとすれば、それは合っていますよ. --> for(k=0;k<=j;k++){ hz[k]=hz[k]+(dertat*(ey[k]-ey[k-1]))/(dertax*u0); /* printf("hz[%d] = %1.14lf\n",k,hz[k]);*/ fprintf(fp,"%1.14lf\n",hz[k]); } <-- このループを抜けてきたときに、k の値は 100 (99 + 1)に なっている筈です. ご参考まで.