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

时间:2013-03-06 00:54:34

标签: c arrays scanf

我对编程很新,所以对任何愚蠢的错误/疏忽表示道歉 我正在尝试编写一个程序,该程序读取包含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文件中的值的数组,我将非常感激。

由于

2 个答案:

答案 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