質問: 0; i < 200; i++){ fprintf(fp, "%d, %lf\n", i*10, sum_data[i]/50.); } printf("check6\n"); fclose(fp); printf("closed file.\n"); return 0; } ```
回答: Cent OS7環境のgccを使ってテストしてみました。 (1) atof(argv[1])が0を返しています。 math.hではなく、stdlib.hをincludeしてください。 なお、今回、指定した範囲ではstdlib.hをincludeすると想定どおりの動きをしましたが、 1より小さい数値は浮動小数点では通常、誤差を含みますのでatofを使わず、直接文字列で比較した方が安全です。 (2) (1)の影響でGamma==0.0となり、ファイルをオープンしませんが、fpにゴミが入っており、不当な動作をします。 最初にfp=NULL; を入れておくとopenしなかったことを認識できます。 さらに最初のファイルをcloseした後、次のファイルをopenする前にfp=NULL;しておいた方が安全です。 (2) pos1、pos2が初期化されておらず、ゴミをみて動作しました。 最初に実行した時にはpos1=32767、pos2=-1223608448が入っていました(みていたゴミの内容) ファイルを読むループに入る前に0に初期化してください。