如何访问将哪些值正确地放入struct中?

问题描述 投票:0回答:1

test_system.txt

UPLOADER_ID X1  Y1  X2  Y2  
1   1.00    1.00            
END                 
CUSTOMER_ID TIP X1  Y1  X2  Y2
1   3   2.00    1.00    2.00    1.00
2   2   3.00    1.00    3.00    1.00
3   1   4.00    1.00    4.00    1.00
4   1   5.00    1.00    5.00    1.00
5   2   6.00    1.00    6.00    1.00
6   2   7.00    1.00    7.00    1.00
7   1   8.00    1.00    8.00    1.00
8   1   9.00    1.00    9.00    1.00
9   2   10.00   1.00    10.00   1.00
10  1   11.00   1.00    11.00   1.00
11  1   12.00   1.00    12.00   1.00
END                 
LINE_ID X1  Y1  X2  Y2  
1   1.00    1.00    2.00    1.00    
2   2.00    1.00    3.00    1.00    
3   3.00    1.00    4.00    1.00    
4   4.00    1.00    5.00    1.00    
5   5.00    1.00    6.00    1.00    
6   6.00    1.00    7.00    1.00    
7   7.00    1.00    8.00    1.00    
8   8.00    1.00    9.00    1.00    
9   9.00    1.00    10.00   1.00    
10  10.00   1.00    11.00   1.00    
11  11.00   1.00    12.00   1.00    
END 

这是我必须阅读的文本文件。

#include "stdlib.h"
#include "string.h"
#include "math.h"

typedef struct {
    int size,id,tip;
    float x1,x2,y1,y2;
}blocks;

int main() {
    blocks *block1 , *block2 , *block3;
    char line[60];
    int blcNum=1, sizer=0, temp;
    block1 = malloc( sizeof(blocks) );
    block2 = malloc( sizeof(blocks) );
    block3 = malloc( sizeof(blocks) );
    FILE *fp;
    fp = fopen("test_system.txt","r");
    while(!feof(fp)){
        fgets(line,60,fp);
            if ( strstr(line,"\0") != NULL && strstr(line,"ID") == NULL && strstr(line,"END") == NULL ) {
            sizer++;
            printf(line); 
            }
            else if ( strstr(line,"END") != NULL ){
                if ( blcNum == 1){
                    block1->size = sizer,blcNum++,sizer = 0;
                }
                else if ( blcNum == 2){
                    block2->size = sizer,blcNum++,sizer = 0;
                }
                else if ( blcNum == 3){
                    block3->size = sizer,blcNum++,sizer = 0;
                }
            }
    };
    block1 = realloc(block1 , block1->size * sizeof(blocks));
    block2 = realloc(block2 , block2->size * sizeof(blocks));
    block3 = realloc(block3 , block3->size * sizeof(blocks));
    fclose(fp);
    line == NULL,blcNum = 1;
    fp = fopen("test_system.txt","r");
    for ( temp =0 ; temp < block1->size ; ++temp)
    {
        while(!feof(fp)){
            fgets(line,60,fp);
            if (  strstr(line,"ID") == NULL && strstr(line,"END") == NULL && strstr(line,"\0") != NULL)
            {
                if ( blcNum == 1){
                    fscanf(fp,"%d %.2f %.2f",&(block1+temp)->id,&(block1+temp)->x1,&(block1+temp)->y1);
                }
                else if ( blcNum == 2){
                    fscanf(fp,"%d %d %.2f %.2f %.2f %.2f",&(block2+temp)->id,&(block2+temp)->tip,
                                                          &(block2+temp)->x1,&(block2+temp)->y1,
                                                          &(block2+temp)->x2,&(block2+temp)->y2);
                }
                else if ( blcNum == 3){
                    fscanf(fp,"%d %.2f %.2f %.2f %.2f",&(block3+temp)->id,&(block3+temp)->x1,
                                                       &(block3+temp)->y1,&(block3+temp)->x2,
                                                                          &(block3+temp)->y2);
                }
            }
            else if ( strstr(line,"END") != NULL ){
                    blcNum++;
            }
        }
    }
   fclose(fp);
   printf("\nUploader's information : \n");
   for (temp =0; temp < block1->size ; ++temp)
   {
    printf(" id : %d , X1 : %.2f , Y1 : %.2f  \n",(block1+temp)->id,(block1+temp)->x1,(block1+temp)->y1);
   }
   printf("\ncustomer's information : \n");
   for (temp =0; temp < block2->size ; ++temp)
   {
    printf(" id : %d , tip : %d , X1 : %.2f , Y1 : %.2f , X2 : %.2f , Y2 : %.2f \n",(block2+temp)->id,(block2+temp)->tip,(block2+temp)->x1,
                                                                                    (block2+temp)->y1,(block2+temp)->x2,(block2+temp)->y2);
   }
   printf("\nLine's information : \n");
   for (temp =0; temp < block3->size ; ++temp)
   {
    printf(" id : %d , X1 : %.2f , Y1 : %.2f , X2 : %.2f , Y2 : %.2f \n",(block2+temp)->id,(block2+temp)->x1,
                                                                         (block2+temp)->y1,(block2+temp)->x2,(block2+temp)->y2);
   }
    printf("\n1 . block's size : %d ",block1->size);
    printf("\n2 . block's size : %d ",block2->size);
    printf("\n3 . block's size : %d ",block3->size);
    free(block1);
    free(block2);
    free(block3);
    return 0;
} 

这也是我的源代码,用于从文本文件中获取值并将其放入struct中。完成了我知道的每件事,但不能真正取回我在结构中所输入的内容。我是C和C的新手,所以有人会帮忙吗?

文本源中有3个块,分别名为uploader,customer和line,其id为x1,x2,y1,y2坐标变量,customer还有一个名为type的变量。]​​>

我用端线计算了它们的大小,忽略行包括“ END”之类的字符串。然后分配结构对象及其大小,然后逐行从文本源获取值。

所以如何才能真正访问它们?

test_system.txt UPLOADER_ID X1 Y1 X2 Y2 1 1.00 1.00 END CUSTOMER_ID提示X1 Y1 X2 Y2 1 3 2.00 1.00 2.00 1.00 2 2 3.00 1.00 3.00 1.00 ...

c struct dynamic-memory-allocation
1个回答
0
投票
  • 在第46行中使用函数fgets(line,60,fp)
© www.soinside.com 2019 - 2024. All rights reserved.