前提・実現したいこと
・実現したいこと
配列の要素数をループの回数にしたいことが目的とした数字を2つ入力してもらい、ファイルとターミナルに表示するプログラムの出力ミスの原因の理解
おそらく動的確保の方法が間違っているとは思いますが、考えてもわからなかったため質問させていただきます。
発生している問題・エラーメッセージ
数字1と2を入力形式(1,2)として入力してください(両方0入力で終了): 1,1 数字1と2を入力形式(1,2)として入力してください(両方0入力で終了): 1,1 数字1と2を入力形式(1,2)として入力してください(両方0入力で終了): 1,1 数字1と2を入力形式(1,2)として入力してください(両方0入力で終了): 0,0 x = 1, y = 1 x = 1, y = 1 x = 1, y = 1513857330 result.csv ファイルへの出力を終えました
エラーではありませんが、出力時にyの最後の値がおかしい値になっています。
また、4回以上入力をすると出力ファイルが開けないという結果になります。
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3 4int main(void){ 5 int *ipx,*ipy; //int型ポインタ 6 int i,count; //カウンタ 7 8 FILE *fp; //ファイルポインタ 9 char *fname = "resultaaa.csv"; //出力ファイル名 10 11 /* メモリ領域の確保 */ 12 ipx = (int *)malloc(sizeof(int)); 13 ipy = (int *)malloc(sizeof(int)); 14 15 /* 配列要素の格納、表示 */ 16 i = 0; 17 while(1){ 18 printf("数字1と2を入力形式(1,2)として入力してください(両方0入力で終了): "); 19 scanf("%d,%d",&ipx[i],&ipy[i]); 20 //終了条件 21 if(ipx[i] == 0 && ipy[i] == 0) break; 22 i++; 23 } 24 25 /* ファイルオープン処理 */ 26 fp = fopen(fname,"w"); 27 if(fp == NULL){ 28 printf("%sファイルが開けませんでした。\n",fname); 29 return -1; 30 } 31 32 /* ファイル、ターミナル出力 */ 33 count = 0; 34 while(count < i){ 35 printf("x = %d, y = %d\n",ipx[count],ipy[count]); 36 fprintf(fp,"%d,%d\n",ipx[count],ipy[count]); 37 count++; 38 } 39 40 /* ファイルクローズ */ 41 fclose(fp); 42 printf("%s ファイルへの出力を終えました。\n",fname); 43 44 /* メモリ解放 */ 45 free(ipx); 46 free(ipy); 47 48 return 0; 49}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー