2014-09-01 1 views
-2

Я работаю над заданием и немного в тупике. Цель задания - прочитать названия деталей из документа txt и поместить их в структуру деталей. Я использовал fgets(), чтобы поместить информацию в массив 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 различных типов. и у вас есть только один тип, который является массивом символов. ваши данные находятся в одном типе данных, таком как строка. может быть, ваш вопрос не очень ясен. если вы хотите добавить много частей строки во многие переменные, обратитесь к одной структуре. то это возможно.

1

Если названия деталей не содержат цифр, это может сработать. fscanf будет сканировать файл, пока он успешно прочитает шесть элементов. %24[ a-zA-Z] пропускает ведущие пробелы и считывает до 24 букв и пробелов в верхнем или нижнем регистре. %7s будет считывать до семи символов в следующий пробел. %lf будет читать double, %4s будет считывать до четырех символов в следующий пробел. %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); 
} 
Смежные вопросы