繁体   English   中英

用C读取用户指定长度的数据

[英]Reading in data of user specified length in C

我正在尝试创建一个程序,该程序将从多个文本文件中读取数据并比较每个文件中的数据。 目前,我一直试图从具有未知列数和行数的文件中读取数据,直到用户在运行时指定长度为止。

过去我使用过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;
}

令人敬畏的是,它将以某种方式摆脱必须列数和行数的麻烦,但是我猜这已经超越了我自己。 感谢您提供的任何帮助。

也许:

for (i=0; i<max; i++)
{
  fscanf (fp, " %f", &var[i])
}

您应使用double类型的floatvar分配为至少max的长度

或使用fgets读取整行,然后使用strtokstrtod获取浮点数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM