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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nastin
1 / 1 / 0
Регистрация: 15.10.2012
Сообщений: 36
#1

Исправить ошибки в связном списке - C++

18.03.2013, 00:21. Просмотров 318. Ответов 1
Метки нет (Все метки)

Почти готовая лабораторка, но не хватает несколько деталей. Помогите решить проблему, пожалуйста!
Задание :
1. Создание списка из файла.
2.Insert <елемент> n Вставка елемента в позицию n.
3. DELETE N Удаление елемента з N позиции.
4.CHANGE M N – Смена елементов M N .
5.DUMP Вывод в конечный файл .

Все работает, но когда открываю текстовый файл со списком или отчетом, вместо элементов списка какие-то значки, а когда открываю файл в программе все ок, как исправить?
И еще элементы списка у меня числа, а проверку на ввод как сделать не знаю!
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
// linklist.cpp
// linked list
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstdio>
using namespace std;
////////////////////////////////////////////////////////////////
struct link                           //one element of list
   {
   int data;                          //data item
   link* next;                        //pointer to next link
   };
////////////////////////////////////////////////////////////////
class linklist                        //a list of links
   {
   private:
      link* first;                    //pointer to first link
       
   public:
      linklist()                      //no-argument constructor
         { first = NULL; }            //no first link
      void additem(int d);            //add data item (one link)
      void display();                 //display all links
      void diskOut();
      void diskIn();
      void report();
      void del_po_numb(int n);
      void reverse(int n,int m);
 
   };
//--------------------------------------------------------------
void linklist::additem(int d)         //add data item
   {
   link* newlink = new link;          //make a new link
   newlink->data = d;                 //give it data
   newlink->next = first;             //it points to next link
   first = newlink;                   //now first points to this
   }
//--------------------------------------------------------------
void linklist::display()              //display all links
   {
   cout << endl;
   link* current = first;             //set ptr to first link
   while( current != NULL )           //quit on last link
      {
      cout << current->data << endl;  //print data
      current = current->next;        //move to next link
      }
   cout << endl;   
   }
//--------------------------------------------------------------
void linklist::diskOut()
   {
   ofstream outfile;
   int d;
   outfile.open("data.txt",ios::in);
   link* current = first;           
   while( current != NULL )          
      {
      d = current->data;
      outfile.write(reinterpret_cast<char*>(&d), sizeof(int));
      current = current->next;        
      }
   outfile.close();
   }
 
//--------------------------------------------------------------
void linklist::report()
   {
   ofstream outfile;
   int d;
   
  
   outfile.open("report.txt",ios::out|ios::in);
   link* current = first;           
   while( current != NULL )          
      {
      d = current->data;
      outfile.write(reinterpret_cast<char*>(&d), sizeof(int));
      current = current->next;        
      }
   outfile.close();
   }
 
//--------------------------------------------------------------
void linklist::diskIn()
   {
               
   ifstream infile;
   int d;
   
   infile.open("data.txt",ios::in );
   infile.seekg(0);
   infile.read((char*)&d,sizeof(int));
   while(infile)
      {    
      link* newlink = new link;
      newlink->data = d;
      newlink->next = first;    
      first = newlink; 
      infile.read((char*)&d,sizeof(int));    
      }
   }
//-------------------------------------------------------------
void linklist::del_po_numb(int n)
{
   int i=1; 
      for (link* tmp=first;(*tmp).next!=NULL;tmp=(*tmp).next)
      {
         if(i==(n-1))
         {
              (*tmp).next=tmp->next->next;
               
              break;           
         }
         i++;
      }
      cout<<endl;
}
//------------------------------------------------------------- 
void linklist::reverse(int one,int two)
 {
        link *p1, *prev_p1, *p2, *prev_p2, *tmp_pos;
 
        prev_p1 = first;
        prev_p2 = first;
 
        for(int i = 1; i < one; i++) {
                prev_p2 = prev_p2->next;
        }
        p2 = prev_p2->next;
        for(int i = 1; i < two; i++) {
                prev_p1 = prev_p1->next;
        }
        p1 = prev_p1->next;
 
       // p2->data.vivod(); printf("\n");
       // p1->data.vivod(); printf("\n");
 
        if (prev_p1 == p2)
        {
            p2->next = p1->next;
            p1->next = p2;
            prev_p2->next = p1;
        }
        else if (prev_p2 == p1)
        {
            p1->next = p2->next;
            p2->next = p1;
            prev_p1->next = p2;
        }
        else
        {
            swap(p1->next, p2->next);
            swap(prev_p1->next, prev_p2->next);
        }
}
//---------------------------------------------------------------
 
////////////////////////////////////////////////////////////////
int main()
 {  
   linklist li;       
   int pos,x;
   char num;
   char ch;
   char ans;
  int n;
  int p,m;
   while(true)
   {
   cout << "What do you want to do? "
   "\n'a'-add to list"
   "\n's'-show the list"
   "\n'w'-write to file"
   "\n'r'-read file"
   "\n'j'- make report"
   "\n'o'- reverse 2 elements"
   "\n'd'-delete element number n"
   "\n'x'-exit" << endl; cin >> ans;
    switch(ans)
      {
      case 'a':  cout << "Enter link in the list: "; cin >> num; li.additem(num); break;      
      case 's':  li.display(); break;
      case 'w':  li.diskOut(); break;
      case 'r':  li.diskIn(); break;
      case 'j':  li.report(); break;
      case 'd':  cout << "Enter n :"; cin >> n; li.del_po_numb(n); break;
      case 'o':  cout <<"Enter first position :"; cin >> p; cout << "Enter second position:"; cin >> m; li.reverse(p-1,m-1);break;
      case 'x':  exit(0);
     
      default: cout << "Wrong command.";
      }
   }
   
   
   system("PAUSE");
   return 0;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 00:21     Исправить ошибки в связном списке
Посмотрите здесь:

C++ Пузырёк на связном списке
C++ Как в связном списке присвоить NULL полю next, если тип этого поля не указатель, а ссылка?
C++ Алгоритм Дейкстры в связном списке + файлы.
Copy-Constructor В Шаблонном Связном списке C++
Как удалить узел в связном списке? C++
C++ Нужно исправить функцию в двухсвязном списке
Как в связном списке обратиться к элементу по адресу C++
Исправить ошибки C++
непонятка в связном списке C++
Передать значение из одной функции в другую функцию в связном списке C++
C++ Исправить ошибки
Ошибки линковки в двусвязном списке C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SDev
43 / 41 / 10
Регистрация: 15.03.2013
Сообщений: 88
18.03.2013, 08:47     Исправить ошибки в связном списке #2
вместо read и write используйте операторы >> и <<, тогда целочисленные значения будут выводится в файл текстовом формате

Добавлено через 8 минут
Цитата Сообщение от nastin Посмотреть сообщение

Все работает, но когда открываю текстовый файл со списком или отчетом, вместо элементов списка какие-то значки, а когда открываю файл в программе все ок, как исправить?
И еще элементы списка у меня числа, а проверку на ввод как сделать не знаю!
переменная num наверное должна быть типа int, иначе в список заносятся код введенного символа, а не число представленное этим символом
Yandex
Объявления
18.03.2013, 08:47     Исправить ошибки в связном списке
Ответ Создать тему
Опции темы

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