gpt4 book ai didi

c - 为什么我的循环没有到达文件末尾?

转载 作者:太空宇宙 更新时间:2023-11-04 02:01:39 24 4
gpt4 key购买 nike

我正在 Windows 8.1 上的 Visual Studio 2012 中构建一个应用程序,它使用线性回归来计算/预测某一年的世界人口。正在从文本文件中读取数据,程序使用该数据计算线性回归。

文本文件内容:

0.001 0.200
1.000 0.310
1.500 0.450
1.650 0.500
1.750 0.791
1.800 0.978
1.850 1.262
1.900 1.650
1.927 2.000
1.950 2.519
1.955 2.756
1.960 2.982
1.965 3.335
1.970 3.692
1.975 4.068
1.980 4.435
1.985 4.831
1.990 5.263
1.995 5.674
2.000 6.070
2.005 6.454
2.008 6.707
2.009 6.800

我遇到的问题是,当我循环遍历文件以将数据存储在结构数组中时,在我可以完全读取文件之前出现异常。

这是我遇到问题的函数:

int ReadFile(char* filename) {
char line[20];
int i = 0;
int recordCount = 0;
FILE* file = NULL;
Population* wp[] = {0};

file = fopen(filename, "r"); /* open text file for reading */
if (file != NULL) {
printf("FILE OPENED FOR READING\n");
while (fgets(line, 20, file) != NULL) {
fscanf(file, "%s", line);
recordCount++;
}
fclose(file);
printf("There are %d records.\n\n", recordCount);
//*wp = (Population*)malloc(sizeof(Population) * recordCount);
file = fopen(filename, "r");
for (i = 0; i < recordCount; i++) {
wp[i] = (Population*)malloc(sizeof(Population));
fscanf(file, "%5f", &wp[i]->year);
printf("%f ", wp[i]->year);
fscanf(file, "%5f", &wp[i]->population);
printf("%f\n", wp[i]->population);
}
}
fclose(file);
return 1;
}

最后一个 for 循环(我为结构分配空间的循环)是导致我的程序崩溃的循环。在第 4 次崩溃之前,我可以获得大约 3 次迭代。

异常抛出:

First-chance exception at 0x7741D7E0 (ntdll.dll) in worldpopulation.exe: 0xC0000005: Access violation reading location 0x871EADD7.
Unhandled exception at 0x7741D7E0 (ntdll.dll) in worldpopulation.exe: 0xC0000005: Access violation reading location 0x871EADD7.

异常似乎是文件指针损坏引起的,但我不知道为什么。谁能帮我弄清楚为什么最后一个循环会导致崩溃?谢谢!

最佳答案

while (fgets(line, 20, file) != NULL) {
fscanf(file, "%s", line);
recordCount++;

您正在阅读两次并计算一次。首先使用 fgets,然后使用 fscanf。我猜您想摆脱 fscanf

另一个问题是:

Population* wp[] = {0};
[...]
wp[i] = (Population*)malloc(sizeof(Population));

访问 wp[0] 以外的任何内容都是非法的。同样,我猜你想分配类似的东西:

Population** wp = malloc(recordCount * sizeof *wp);

您两次读取文件的方式效率不高。您应该第一次执行 fscanf 并根据需要使用 realloc 增长 wp

关于c - 为什么我的循环没有到达文件末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com