Форум программистов, компьютерный форум CyberForum.ru

Необходимо создать связной список с записью в файл и восстановлением из файла - C++

Восстановить пароль Регистрация
 
SARS
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 17
13.03.2014, 12:40     Необходимо создать связной список с записью в файл и восстановлением из файла #1
Народ выручайте. В задании необходимо создать связной список с записью в файл и восстановлением из файла. Со списком я более-менее разобрался, но я не пойму по КАКОМУ принципу происходит чтение/запись и каким образом это прикрутить. Подскажите зашиваюсь времени в обрез.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <iostream>
#include <stdio.h>
#include <string>
#include <locale>
 
 
using namespace std;
 
class STATE
{
    public:
    char countryName [128];
    char countryCapital [128];
    char countryLang [128];
    char countryPolitical [128];
    char countryMoney [128];
    char countryPopulation [128];
    char countryArea [128];
    char moneyTodollar [128];
 
    STATE* eNext;               // указатель на следующий элемент
};
 
STATE* eFirst=0;            //в начале список пуст
 
void addLast (STATE* eLast)     //функция добавления в конец списка
{
    
    eLast -> eNext=0;            // переходим на следующий элемент
    if (eFirst == 0)            // если первый элемент равен 0 (список пуст)
    {
        eFirst = eLast;         //присваеваем указателю на 1й элемент, значение на текущий элемент
        return;
    }
    
    STATE* eCurrent = eFirst;           // иначе задаем временный указатель на начало
    while (eCurrent -> eNext)           // пока не дойдем до последнего элемента
    {
        eCurrent = eCurrent -> eNext;            // цикл перехода с текущего на следующий элемент
    }
    eCurrent -> eNext = eLast;            //для последнего элемента следующим делаем тот, что передали в функцию
}
 
 
STATE* getData ()                          // функция возврата указателя на элемент для добавления
{
    
    STATE* eLast = new STATE;           //создаем новый элемент
    
    cout << "Название страны - " ;
    cin >> eLast -> countryName;
    
        if ((stricmp (eLast -> countryName, "end") == 0))           // при вводе "end"
        {                                                           
            delete eLast;                                          // удаляем элемент
            return 0;
        }
 
    cout << "Столица - ";                             // ВВОД ДАННЫХ В СПИСОК                      
    cin >> eLast -> countryCapital;
    
    cout << "Язык - ";
    cin >> eLast -> countryLang;
    
    cout << "Госстрой - ";
    cin >> eLast -> countryPolitical;
    
    cout << "Денежная единица - ";
    cin >> eLast -> countryMoney;
    
    cout << "Численность наседения млн.чел.- ";
    cin >> eLast -> countryPopulation;
    
    cout << "Площадь территории кв.км.- ";
    cin >> eLast -> countryArea;
    
    cout << "Курс валют за 1$ - ";
    cin >> eLast -> moneyTodollar;    
    
    eLast -> eNext = 0;              // данных больше нет
    return eLast;
}
 
 
 
void showData (STATE* eLast)            // функция вывода данных на экран
{
 
    cout << eLast -> countryCapital
         <<"/ "
         << eLast -> countryLang 
         <<"/ "
         << eLast -> countryPolitical 
         <<"/ "
         << eLast -> countryMoney
         <<"/ "
         << eLast -> countryPopulation
         <<"/ "
         << eLast -> countryArea
         <<"/ "
         << eLast -> moneyTodollar
         <<" for 1$/" << endl;
}
 
int main (int argc, char* eArgc[])
{
    
    setlocale (LC_ALL, "Russian");
 
    cout << "Enter data" << endl 
         << "Enter 'end' for close" <<"\n \n" << endl;
         
    STATE* eLast;                               // указатель на элемент списка
    while (eLast = getData())               // пока не будет введена команда "end"
    {
        addLast (eLast);                    // добавление элементов в конец списка
    }
    cout << "ГОСУДАРСТВО:" <<"\n"<< endl;
    eLast = eFirst;                       // определяем начало списка
    while (eLast)
    {
        showData (eLast);               // вывод содержимого списка по полям каждого элемента
        eLast = eLast -> eNext;         // переход на следующий элемент
    }
    system ("PAUSE");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 12:40     Необходимо создать связной список с записью в файл и восстановлением из файла
Посмотрите здесь:

C++ Связной список
Связной список в Си++ C++
Создать программу на С++, которая будет продуцировать цепочки с записью их в файл C++
Связной список и сортировка C++
Построить связной список C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
13.03.2014, 13:09     Необходимо создать связной список с записью в файл и восстановлением из файла #2
C++
1
2
#include <ifstream>
#include <fstream>
Дальше..
C++
1
2
3
4
5
6
int main() {
 
ifstream input; // инпут функция.
ofstream output; // оутпут функция.
input.open("file.txt");
output.open("output.txt");
чтение из файла:

C++
1
2
3
4
5
6
7
8
9
10
int NUM_OF_FILE = 0;
 
while(!input.eof()) {
string str;
getline(input, str);
//NUM_OF_FILE++; // подсчитать кол-во чисел в файле
//cout << str << endl; // показать инпут дату(прямо в консоли)
//output << str << endl; // отпутить данные из файла в output.txt
}
// cout << NUM_OF_FILE << endl; // показать кол-во чисел в файле.
C++
1
 }
SARS
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 17
15.03.2014, 15:09  [ТС]     Необходимо создать связной список с записью в файл и восстановлением из файла #3
Esecman, спс за наводку. По самим командам вроде как все понятно, понятно как написать две програмки одну для чтения, другую для записи файла. Но я не пойму как прикрутить чтение/запись файла в свою программу. По какому принципу?
Т.е. допустим для записи данных в файл после строки
C++
1
cin >>  eLast -> countryName;
добавить
C++
1
input >> countryName;
Или я неправильно понял?
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
15.03.2014, 20:27     Необходимо создать связной список с записью в файл и восстановлением из файла #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <fstream>
 
using namespace std;
 
void read_file() {
       
  ofstream output;
  output.open("output.txt"); // ГЄГіГ¤Г* îóòïóòèòü
  FILE* file;
  file = fopen("data.txt", "r"); // Г·ГІГҐГ*ГЁГҐ, ГґГ«Г*ГЈ "r"
  float i = 0;
  int NUM_OF_FILE = 0;
  
  if(!file) {
  perror("File not found!");
  }
  else {
  while(!feof(file)) {
  fscanf(file, "%f", &i);
  NUM_OF_FILE++;
  cout << i << endl; // Г·ГІГҐГ*ГЁГҐ ГЁГ§ ГґГ*éëГ* ГЁ âûâîä
  output << i << endl; // îóòïóòèì ýòîò âûâîä Гў ГґГ*éë output.txt
  }
  cout << "The number of integers in the file is " << NUM_OF_FILE << endl; // ïîêГ*Г§Г*ГІГј êîëè÷åñòâî Г·ГЁГ±ГҐГ« Гў ГґГ*éëå(input);
  }  
}
 
int main () {
 
  read_file();
  system("pause");
  return 0;
}
Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <fstream>
 
using namespace std;
 
void read_file() {
       
  ifstream input;
  ofstream output;
  
  input.open("data.txt"); // âõîä
  output.open("output.txt"); // ГЄГіГ¤Г* îóòïóòèòü
  
  int i = 0;
  float n[i];
  int NUM_OF_FILE = 0;
  
  if(!input) {
  perror("File not found!");
  }
  
  else {
       
  while(!input.eof()) {
  input >> n[i];
  output << n[i] << endl;
  NUM_OF_FILE++;
  }
  
  }
  
  cout << "The number of integers in the file is " << NUM_OF_FILE << endl;
}
 
int main () {
 
  read_file();
  system("pause");
  return 0;
}
Или вот этот пример, немного меньше кода, тут вариант записи в массив и оутпут
Yandex
Объявления
15.03.2014, 20:27     Необходимо создать связной список с записью в файл и восстановлением из файла
Ответ Создать тему
Опции темы

Текущее время: 05:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru