Назначить данные текстового файла узлу структуры в связанном списке

#c #linked-list #nodes #fstream #assign

#c #связанный список #узлы #fstream #назначить

Вопрос:

Хорошо, поэтому я никогда раньше не работал с fstream или не открывал и не читал файлы и файлы в программе. Мой инструктор только что дал несколько строк кода, которые открывают, считывают и закрывают текстовый файл. Я должен извлечь данные из текстового файла и поместить их в отдельные узлы в связанном списке, а затем продолжить делать с ними другие вещи, которые не важны, потому что я знаю, как это сделать. Моя проблема в том, что я не знаю, как присвоить эти значения значениям структуры.

Текстовый файл выглядит следующим образом:

Кларк Кент 55000 2500 0.07

Лоис Лейн 56000 1500 0.06

Тони Старк 34000 2000 0.05

Я создал структуру с именем Employee, а затем основные функции вставки, чтобы я мог добавлять новые узлы в список. Теперь, как мне получить эти имена и номера в мою структуру.

вот мой код:

 #include <fstream>
#include <iostream>
using namespace std;

struct Employee
{
    string firstN;
    string lastN;
    float salary;
    float bonus;
    float deduction;

    Employee *link;
};

typedef Employee* EmployPtr;
void insertAtHead( EmployPtramp;, string, string, float, float,float );
void insert( EmployPtramp;, string, string, float, float,float );

int main()
{
    // Open file
    fstream in( "payroll.txt", ios::in );

    // Read and prints lines
    string first, last;
    float salary, bonus, deduction;

    while( in >> first >> last >> salary >> bonus >> deduction)
    {
        cout << "First, last, salary, bonus, ded: " << first << ", " << last << ", " << salary << ", " << bonus << ", " << deduction <<endl;
    }

    // Close file
    in.close();

    EmployPtr head = new Employee;


 }

void insertAtHead(EmployPtramp; head, string firstValue, string lastValue,
            float salaryValue, float bonusValue,float deductionValue)
{
    EmployPtr tempPtr= new Employee;

    tempPtr->firstN = firstValue;
    tempPtr->lastN = lastValue;
    tempPtr->salary = salaryValue;
    tempPtr->bonus = bonusValue;
    tempPtr->deduction = deductionValue;

    tempPtr->link = head;
    head = tempPtr;
}

void insert(EmployPtramp; afterNode, string firstValue, string lastValue,
        float salaryValue, float bonusValue,float deductionValue)
{
    EmployPtr tempPtr= new Employee;


    tempPtr->firstN = firstValue;
    tempPtr->lastN = lastValue;
    tempPtr->salary = salaryValue;
    tempPtr->bonus = bonusValue;
    tempPtr->deduction = deductionValue;

    tempPtr->link = afterNode->link;
    afterNode->link = tempPtr;
}
 

Кроме того, я попытался выполнить поиск по этому, и появились результаты, но все они открывались и считывали данные иначе, чем те, которые мне дали. Я новичок в c , исходя из Java, поэтому я не понимаю часть кода, который я иногда вижу.

Комментарии:

1. Ваш инструктор не рассказывал, как создавать экземпляры объектов?

2. Да, я знаю, как создать экземпляр объекта, ха-ха, я просто не знаю, что происходит в цикле while. Данные форматируются и печатаются, но я не уверен, как это происходит, я действительно не вижу никакого кода, который присваивает текстовые данные этим переменным first, last, salary и т. Д., Чтобы их можно было распечатать как есть. Если это имеет смысл?

Ответ №1:

 EmployPtr head = new Employee;

while( in >> first >> last >> salary >> bonus >> deduction)
{
    cout << "First, last, salary, bonus, ded: " << first << ", " << last << ", " << salary << ", " << bonus << ", " << deduction <<endl;
    insertAtHead (head, first, last, salary, bonus, deduction);
}
 

У вас уже было 99% решения. Вам просто нужно создать список по мере чтения файла.

Комментарии:

1. Спасибо, это помогло! Я просто не знал, что значения уже были присвоены чему-то.