我对编程很新,所以对任何愚蠢的错误/疏忽表示道歉 我正在尝试编写一个程序,该程序读取包含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个值,我希望PLUS在每个值的末尾都有一个未输出的0.000000值。当我尝试绘制一些数据时,这会产生很多问题。
从我在这里和其他地方所做的搜索看起来就像是while(!feof(f)...循环就是问题。
如果有人能帮助我获取只包含.dat文件中的值的数组,我将非常感激。
由于
答案 0 :(得分:1)
数组索引在{0}中与volume[0]
类似,即初始化cnt=0;
而不是1。
Additionaly,
if (fscanf(f, "%f %f %f\n", &volume[cnt], &temp[cnt], &pressure[cnt]) > 0)
cnt++;
else
break;
这break
可能会解决问题。
编辑:
我可以用来打印的代码:
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++; ....
这里已经纠正了吗?不是,你从0到cnt-1再打印一次,从1输入到cnt-1。只有为什么在努力而不是在阵列的乞讨中你有0?无论如何,冷你测试初始化cnt为0?这正是你用的吗?
答案 1 :(得分:0)
查看如何打印阵列。您的指数可能会偏离,导致0.0值落后。您还应初始化cnt=0
。