gpt4 book ai didi

c - 读取数据文件 - 数组末尾不需要的额外值

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:49 26 4
gpt4 key购买 nike

我对编程还很陌生,所以对于任何愚蠢的错误/疏忽深表歉意。
我正在尝试编写一个程序来读取包含 3 列数字的数据文件并将它们放入数组中。我想处理多达 100 个元素的文件。
问题是,在我读取一个我知道包含 20 个元素的数据文件后,一个额外的值或 0.00000 被拍到每个数组的末尾,因此它写入了 21 个值而不是我想要的 20 个。

我的代码是这样的:

#include <stdio.h>
#include <cpgplot.h>
#include <stdlib.h>
#include <math.h>
#define MAXELEMENTS 100


int main()
{
/*Declare variables*/
float volume[MAXELEMENTS], temp[MAXELEMENTS], pressure[MAXELEMENTS];
int cnt = 1;
int i;
FILE *f;
char headings[MAXELEMENTS];
char filename[100];


/*Prompt user for file name*/
printf("Please enter the name of the file: ");
scanf("%s", &filename);

f = fopen(filename, "r");
if(f == NULL)
{
printf("File not found\n");
exit(EXIT_FAILURE);
}

/* Buffer line to read the headings of the data*/
fgets(headings, MAXELEMENTS, f);

/* Read records from the file until the end is reached*/
while(!feof(f) && cnt<MAXELEMENTS){
if (fscanf(f, "%f %f %f\n", &volume[cnt], &temp[cnt], &pressure[cnt]) > 0) cnt++;
}

因此,当我打印出数组时,我得到了 20 个我想要的值,在每个值的末尾加上一个未处理的 0.000000 值。稍后当我尝试绘制一些数据时,这会产生很多问题。

从我在这里和其他地方所做的搜索来看,问题似乎出在 while(!feof(f)... 循环上。

如果有人能帮助我获得仅包含 .dat 文件中的值的数组,我将不胜感激。

谢谢

最佳答案

数组索引从 0 开始,就像在 volume[0] 中一样,也就是说,您初始化 cnt=0; 而不是 1。另外,

if (fscanf(f, "%f %f %f\n", &volume[cnt], &temp[cnt], &pressure[cnt]) > 0) 
cnt++;
else
break;

这个 break 可能会解决问题。

编辑:

The code i can use to print:

i =0; // here you begging actualy with 0 or 1? Is here alrready corrected? 
while (i < cnt)
{ printf("%f\t %f\t %f\n", volume[i], temp[i], pressure[i]);
i++; ....

这里已经更正了吗?不是,你再打印一个from 0 to cnt-1,输入from 1 to cnt-1。只是为什么在数组的最后而不是在数组的开头你有 0?无论如何,冷你测试初始化​​ cnt 到 0?这正是您使用的吗?

关于c - 读取数据文件 - 数组末尾不需要的额外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15237044/

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