#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. Спасибо, это помогло! Я просто не знал, что значения уже были присвоены чему-то.