我的文件包含一系列数字(整数,浮点数,整数,浮点数....),每个数字都写在一个单独的行上。列数不同,从一行到另一行,即
1 2.45 3 1.75
5 3.45 7 2.55 9 3.25
6 1.75 4 3.55 6 2.55 9 2.45
程序应读取整个文件的内容,并将数据放入float类型的数组中,每行包含一个条目。 这是我的基本解决方案,但这只适用于我没有固定列的情况。
float Read(FILE *pFile)
{
char line[50]; char letter[5];
fi = fopen("file.txt", "r");
while (fgets(line,200,fi)!=NULL)
{
sscanf(line,"%f %f %f",&a[i], &a2[i],&a3[i]);
printf("%2.0f %2.5f %2.0f\n",a[i],a2[i],a3[i]);
}
fclose(fi);
return a[i];
}
请帮助。
答案 0 :(得分:1)
使用类似的东西。
如果您需要可重入代码,请参阅man strtok_r
#define MAX_BUFFER 200
float Read(FILE* pFile)
{
char line[MAX_BUFFER];
while(fgets(line, MAX_BUFFER, pFile) != NULL)
{
char* ptr = strtok(line, " ");
while(ptr != NULL)
{
printf("2.5f ", (float)atof(ptr));
ptr = strtok(NULL, " ");
}
printf("\n");
}
}
请注意,您编写了行[50],但在fgets()中读取了200,即a 潜在缓冲区溢出。 '我'甚至没有宣布,pFile从未使用过。
答案 1 :(得分:0)
查找strtok并进行标记。
确保考虑几件事情,例如找出所需阵列的长度(内存管理),跟踪阵列中的位置等等。