我正在尝试创建一个程序,该程序将从多个文本文件中读取数据并比较每个文件中的数据。目前,我试图从具有未知数量的列和行的文件中读取,直到用户在运行时指定长度。
过去我使用过fscanf,但它总是有多少列和它们被硬连线到程序中的变量类型,即fscanf(fp,"%d %d %d",&a,&b,&c)
。是否有可能使用某些东西,以便我不必本身编入代码说3个双指标?目前我有它,所以用户输入文件的数量,每个文件和行的列。该程序的想法是始终比较类似的文件,因此它们需要始终具有相同的格式,即行数和列数。
当前代码是否有帮助:
int main(){
/* Ask for # of files */
printf("\nHow many files are you comparing\n");
int filnum;
scanf("%d",&filnum);
/* Ask for # of columns */
printf("How many columns of data are there?\n");
int colnum;
scanf("%d",&colnum);
/* Ask for length of rows */
printf("How many rows of data are there?\n");
int rownum;
scanf("%d",&rownum);
/* Read in file names */
char filea[filnum][50];
int i;
for (i=0; i<filnum; i++) {
char temp[50];
printf("Eneter file #%d please.\n",i+1);
scanf("%s",temp);
if(strlen(temp)>50){
printf("Please shorten file to less than 50 char");
exit(0);
}
strcpy(filea[i],temp);
}
/* Create data array on heap */
double* data = (double*)malloc(sizeof(double)*rownum*colnum*filnum);
/* Start opening files and reading in data */
for (i=0; i<filnum; i++) {
FILE *fp;
fp = fopen(filea[i],"r");
if (fp==NULL) {
printf("Failed to open file #%d",i+1);
exit(1);
}
/* Attempt */
int j,k;
for (j=0; j<rownum; j++) {
for (k=0; k<colnum; k++) {
fscanf(fp," %lf",&data[i*rownum*colnum + j*colnum + k]);
printf("%lf, ",data[i*rownum*colnum + j*colnum + k]);
}
printf("\n");
}
fclose(fp);
}
free(data);
return 0;
}
额外的超棒会以某种方式摆脱不得不加入#列和#行,但是我猜想这已经超越了我自己。感谢您提供的任何帮助。
答案 0 :(得分:1)
可能是:
for (i=0; i<max; i++)
{
fscanf (fp, " %f", &var[i])
}
您应该var
分配至少max
的长度double
float
或者使用fgets
读取整行,然后使用strtok
和strtod
获取浮点数。