これは私の最初の投稿です。私はジョーカーの結果を扱うC言語のプログラムを作っています(Powerballのようなゲームです)。以下に、私の質問に関係するコードだけを示します。まず、前の結果ファイルを読み込むようにプログラムに1を入力します。あなたが入力99その後構造体配列に要素を正しく追加できません
id;day/month/year;num1;num2;num3;num4;num5;joker
の形で結果を挿入して、完全な結果の配列が表示されるように、あなたが入力3 well.Afterwardsとして、それを実行できるように、私は、ファイルが含まれます。 問題は、array(resArr)
に追加された最初の2つの結果は正しく表示されますが、次のすべての追加は擬似乱数で保存されることです。私のコードが2回だけ繰り返される理由は何ですか? ファイル:link
#include <stdio.h>
#include <stdlib.h>
typedef struct results
{
int id,date[3],num[5],joker;
}Results;
Results *read()
{
FILE *fp=fopen("joker.csv","r");
Results *temp=(Results *)malloc(sizeof(Results));
Results *result=(Results *)malloc(sizeof(Results));
int i=0,size=1;
while(!feof(fp))
{
char *s=(char *)malloc(50*sizeof(char));
fgets(s,50,fp);
sscanf(s,"%d;%d/%d/%d;%d;%d;%d;%d;%d;%d",&result[i].id,&result[i].date[0],&result[i].date[1],&result[i].date[2],&result[i].num[0],&result[i].num[1],&result[i].num[2],&result[i].num[3],&result[i].num[4],&result[i].joker);
temp=(Results *)realloc(result,(++size)*sizeof(Results));
if (temp) result=temp;
else
{
result=NULL;
break;
}
i++;
}
fclose(fp);
return result;
}
int findLength()
{
FILE *fp=fopen("joker.csv","r");
int len,i=0;
while(!feof(fp))
{
char *s=(char *)malloc(50*sizeof(char));
fgets(s,50,fp);
i++;
}
fclose(fp);
len=i-1;
return len;
}
void eisagogi(Results *resArr,int *len)
{
Results result;
printf("id;dd/mm/yyyy;num1;num2;num3;num4;num5;joker\n");
scanf("%d;%d/%d/%d;%d;%d;%d;%d;%d;%d",&result.id,&result.date[0],&result.date[1],&result.date[2],&result.num[0],&result.num[1],&result.num[2],&result.num[3],&result.num[4],&result.joker);
resArr=(Results *)realloc(resArr,(*len+1)*sizeof(Results));
resArr[*len]=result;
*len=*len+1;
}
void showResults(Results *resArr,int len)
{
int i;
for (i=0;i<len;i++)
{ printf("%d;%d/%d/%d;%d;%d;%d;%d;%d;%d\n",resArr[i].id,resArr[i].date[0],resArr[i].date[1],resArr[i].date[2],resArr[i].num[0],resArr[i].num[1],resArr[i].num[2],resArr[i].num[3],resArr[i].num[4],resArr[i].joker);
}
}
int menuChoose()
{
int choice;
printf("Load results 1\n");
printf("Append result 3\n");
printf("Result array 99\n");
printf("Exit 0\n");
scanf("%d",&choice);
return choice;
}
int main()
{
Results *resArr=(Results *)malloc(sizeof(Results));
int choice,len;
while(1)
{
choice=menuChoose();
switch(choice)
{
case 1:
resArr=read();
len=findLength();
break;
case 3:
eisagogi(resArr,&len);
break;
case 99:
showResults(resArr,len);
break;
case 0:
exit(0);
break;
}
}
return 0;
}
プログラムの実行例を示し、出力があなたの望むものとどのように異なるかを説明できますか? –
p.s.あなたは 'malloc()'や 'realloc()'のポインタを 'free()'してください。 –
あなたの[feof()の使用](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong)を修正してください。 –