2014-09-01 4 views
-2

저는 과제를 수행 중이며 난리를 치고 있습니다. 과제의 목표는 txt 문서에서 부품 이름을 읽어 부품 구조에 넣는 것입니다. fgets()을 사용하여 정보를 char 배열에 넣었으나 이제 구조로 변환하는 방법을 잘 모르겠습니다.char 배열을 구조체 배열로 변환하는 방법은 무엇입니까?

#include <stdio.h> 
#include <string.h> 

typedef struct part 
{ 
    char pname[25]; 
    char pnumber[8]; 
    double weight; 
    char supplier1[5]; 
    char supplier2[5]; 
    int in_stock; 
} Part; 

void main() 
{ 
    Part partlist[100]; 
    char buffer[260]; 
    FILE *fp; 
    int i = 0; 
    fp = fopen("part_data.txt", "r"); 
    if (fp == NULL) 
    { 
     printf("Could not open file.\n"); 
    } 
    while (!feof(fp)) { 
     if (fgets(buffer,260,fp)) { 
      printf("%s\n", buffer); 
     } 
    } 
    fclose (fp); 
} 

나는 구조에 넣어 위해 노력하고있는 데이터의 예는 이것이다 :

antenna   4553-02 1.9800 A123 B021 12 
ratchet   2347-01 0.8725 A007 B021 49 
seatbelt   1987-01 0.4310 A333 B001 61 
pin    5637-03 0.0351 A007 B010 146 
wing assembly 2372-02 6150.0 A333 B021 4 
+1

구조에 필요한 필드를 결정하십시오. 두 번째로 구조를 정의합니다. –

답변

-1

구조는 다양한 유형의 coll'n입니다. char 배열 인 하나의 유형 만 있습니다. 귀하의 데이터는 문자열과 같은 단일 데이터 형식입니다. 귀하의 질문이 될 수 있습니다 매우 명확하지 않습니다. 많은 변수에 문자열의 많은 부분을 추가하려면 동일한 구조에서 참조하십시오. 그러면 가능합니다.

1

부품 이름에 숫자가 포함되어 있지 않으면 작동 할 수 있습니다. fscanf는 파일을 성공적으로 읽으면 6 개의 항목을 읽습니다. %24[ a-zA-Z]은 선행 공백을 건너 뛰고 최대 24 개의 대소 문자 및 공백을 읽습니다. %7s은 다음 공백까지 최대 7자를 읽습니다. %lf은 double을 읽습니다. %4s은 다음 공백까지 최대 4자를 읽습니다. %d은 정수를 읽습니다. fscanf가 여섯 개의 항목을 읽지 못하면 (아마 EOF에 도달했습니다) while 루프가 끝나고 파일이 닫힙니다.

int i = 0; 
fp = fopen("part_data.txt", "r"); 
if (fp == NULL) 
{ 
    printf("Could not open file.\n"); 
} 
else { 
    while ((fscanf (fp, " %24[ a-zA-Z] %7s %lf %4s %4s %d" 
    , partlist[i].pname, partlist[i].pnumber, &partlist[i].weight   
    , partlist[i].supplier1, partlist[i].supplier2, &partlist[i].in_stock)) == 6) { 
     i++; 
     if (i >= 99) { 
      break; // exit so as to not exceed array limits 
     } 
    } 
    fclose (fp); 
} 
관련 문제