【发布时间】:2021-05-12 06:56:25
【问题描述】:
我的数据如下:
0.05 1.3
0.09 1.8
0.12 1.9
我创建了两个变量 x 和 y 来分别存储它们。
FILE *fp_data;
double *x;
double *y;
int data_size;
char ch;
int i;
fp_data = fopen(path, "r");
while( ( ch = fgetc(fp_data)) != EOF) if(ch=='\n') ++data_size;
if (!fp_data)
{
printf("Data file cannot open...\n");
exit(1);
}
else
{
x = (double*)malloc(data_size * sizeof(double));
y = (double*)malloc(data_size * sizeof(double));
printf("\n%d\n\n", data_size);
for (i = 0; i < data_size; ++i)
{
fscanf(fp_data, "%lf %lf\n", &x[i], &y[i]);
}
fclose(fp_data);
for (i = 0; i < data_size; ++i)
{
printf("%d- %f %f\n", i, x[i], y[i]);
}
}
我注意到我的结果是错误的,例如:
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
但是,如果我删除while( (ch = fgetc(fp_data)) != EOF ) if(ch=='\n') ++data_size; 代码并手动设置data_size,那么一切都很好。
有谁知道fgetc代码有什么问题吗?
【问题讨论】:
-
我想你应该 rewind() 文件。 linux.die.net/man/3/rewind
-
data_size 未正确初始化。您应该使用 -Wall 进行编译并修复所有警告。
-
data_size未初始化。此外,ch的类型必须是int,而不是char。 -
"Data file cannot open...\n"是无用错误消息的典型示例。使用if( (fp_data = fopen(path, "r")) == NULL ){ perror(path); ...