2

私はプログラミングにかなり慣れていないので、ばかげたエラー/見落としをお詫びします。
3 列の数値を含むデータ ファイルを読み取り、それらを配列に入れるプログラムを作成しようとしています。最大で 100 個の要素のファイルを処理したいと思います。
問題は、20 個の要素を含むことがわかっているデータ ファイルを読み取った後、余分な値または 0.00000 が各配列の末尾に平手打ちされ、必要な 20 個ではなく 21 個の値が書き込まれることです。

私のコードは次のようになります。

#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 個の値に加えて、それぞれの末尾に unwated 0.000000 値が追加されます。これにより、後でデータの一部をプロットしようとすると、多くの問題が発生しました。

ここや他の場所で行った検索から、while(!feof(f)... ループが問題であるように見えます。

.dat ファイルの値だけを含む配列を取得するのを手伝ってくれる人がいれば、本当に感謝しています。

ありがとう

4

2 に答える 2

1

配列インデックスは のように 0 で始まります。volume[0]つまり、cnt=0;1 ではなく初期化します。

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 つ出力し、1 から cnt-1 までを入力します。配列の物乞いではなく、エンデで 0 を持っているのはなぜですか? とにかく、あなたは cnt を 0 に初期化することをテストしますか? これはまさにあなたが使用しているものですか?

于 2013-03-06T01:07:03.243 に答える
0

アレイをどのように印刷しているかを確認してください。インデックスがオフになっていて、末尾の0.0値になっている可能性があります。また、を初期化する必要がありますcnt=0

于 2013-03-06T01:15:23.253 に答える