Я пытаюсь создать программу, которая будет считывать данные из нескольких текстовых файлов и сравнивать данные из каждого файла. В настоящее время я застреваю, пытаясь прочитать из файла с неизвестным количеством столбцов и строк, пока пользователь не определит длину во время выполнения.Чтение данных указанной пользователем длины в 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;
}
Extra удивительным будет каким-то образом избавиться от необходимости eneter # столбцов и # строк, но это забегаю вперед, я думаю. Спасибо за любую помощь, которую вы, ребята, можете предложить.
Спасибо, это сработало! –