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

时间:2013-06-12 15:15:16

标签: c file-io user-input

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

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

额外的超棒会以某种方式摆脱不得不加入#列和#行,但是我猜想这已经超越了我自己。感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

可能是:

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

您应该var分配至少max的长度double float

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