2

私はここで行われたことをしようとしています C プログラムを使用して txt ファイルから座標を読み取ります。入力しようとしているデータは次の形式です。

f 10 20 21
f 8 15 11
. . .  .
f 11 12 25

私のポイント構造の唯一の違いは、最初の列に文字を格納するための追加の文字があることです (文字 f である場合とそうでない場合があります)。私は自分のcharを間違って宣言しているか、間違って呼び出していると思いprintfます。いずれにせよ、最初の行だけが読み取られ、プログラムは終了します。何か案は ?

これが私のMWEです

#define FILEPATHtri "/pathto/grid1DT.txt"
#define FILEPATHorg "/pathto/grid1.txt"
#define MAX  4000

#include <stdio.h>
#include <stdlib.h>
#include "math.h"

typedef struct
{    
    float x;
    float y;
    float z;
    char t[1];
}Point;

int main(void) {

    Point *points = malloc( MAX * sizeof (Point) ) ;

    FILE *fp ;
    fp = fopen( FILEPATHtri,"r");

int i = 0;

while(fscanf(fp, "%s %f %f %f ", points[i].t, &points[i].x, &points[i].y, &points[i].z ) == 4 )
{
    i++;
}
fclose(fp);

int n;


for (n=0; n<=i; n++){

    printf("%c  %2.5f %2.5f %2.5f \n", points[i].t, points[n].x, points[n].y, points[n].z ); }


    printf("There are i = %i  points in the file \n And I have read n = %i  points ",i,n);

return 0;

}
4

2 に答える 2

8

そこには 1 文字しかないため、文字列ではなく、コードで単一の文字を使用するだけです。

    char t;
}Point;

次に、それを読むと:

while(fscanf(fp, "%c %f %f %f ", &points[i].t, &points[i].x, &points[i].y, &points[i].z ) == 4 )
{

構造体の最後に 1 文字の配列があると、意図していない可能性のある構造体ハックchar tの準備が整うことに注意してください...代わりに使用する正当な理由char t[1]

また、この行:

for (n=0; n<=i; n++){

する必要があります

for (n=0; n<i; n++){

最後に 1 つ注意してください...一番下の印刷物で読んだ文字を印刷したい場合は、次を使用する必要がありますn

// note your previous code was points[i].t
printf("%c  %f %f %f \n", points[n].t, points[n].x, points[n].y, points[n].z ); }
于 2013-02-06T12:27:01.290 に答える
0

これをチェックして

  while(fscanf(fp, "%c %f %f %f ", points[i].t, &points[i].x, &points[i].y, &points[i].z ) == 4 )
    {
    i++;
}
fclose(fp);

int n;


for (n=0; n<i; n++){

    printf("%c  %2.5f %2.5f %2.5f \n", points[n].t, points[n].x, points[n].y, points[n].z ); }


    printf("There are i = %i  points in the file \n And I have read n = %i  points ",i,n);
getch();
return 0;

}

変更は、単一の文字のみが読み取られるため、 printf ではなく に%s変更されます。また、for ループでの制限チェックも次のように修正されます。%cpoints[i].tpoints[n].tn<i

于 2013-02-06T12:36:48.853 に答える