Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
#1

ошибка в функции подскажите как исправить - C++

04.11.2011, 04:58. Просмотров 2067. Ответов 51
Метки нет (Все метки)

в функции ввод списка с экрана, там был бесконечный цикл который прерывался операторов Break, препод сказал что это не грамотно прерывать цикл с помощью Break, попытался в while само условие написать но выдает такую ошибку "[BCC32 Error] File3.cpp(119): E2378 Do-while statement missing ;
Full parser context
File3.cpp(106): parsing: sp * fs_enter()" че не так ???
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
using namespace std;
    char bufRus[256];
    char* Rus(const char* text)
    {
        CharToOem(text, bufRus);
    return bufRus;
    }
 
struct lfile{
    char name[15];
    char data[10];
    int upd;
};
struct sp{
    lfile elfile;   // поле данных
    sp *next;   // указатель
};
 
sp*print_list(sp *list);//прототип функции вывод на экран
 
 
sp* ft_enter();//прототип функции ввод из текстового файла
 
sp* fs_enter();// прототип функции ввод с экрана
sp* sort(sp *list);// прототип сортировки
void search(sp *list); // прототип функций поиск по имени и вывод в файл
void fsearch(sp *list); //прототип функции поиск файла с наибольшим количеством обращений
 //
sp* pind(sp *list); //прототип получения адреса
sp* del(sp *list,sp *adr);// прототип функции удаления файла
sp * vst(sp *list,sp *adr);// прототип фунции вставка файла
void zmn(sp *list); // прототип функции замена файла
 
void main()
{
   int v;
   sp *k;
   do{
      cout<<Rus("  1: формирование списка из текстового файла")<<endl;
      cout<<Rus("  2: формирование списка с экрана")<<endl;
      cout<<Rus("  3: поиск по заданному полю с сохранением результатов в файле")<<endl;
      cout<<Rus("  4: выборка файла с наибольшим количеством обращений")<<endl;
      cout<<Rus("  5: замена записи")<<endl;
      cout<<Rus("  6: удаление записи после указанного адреса")<<endl;
      cout<<Rus("  7: вставка записи после указанного адреса")<<endl;
      cout<<Rus("  8: вывод списка")<<endl;
      cout<<Rus("  9: выход")<<endl;
      cout<<Rus("вариант ")<<endl;
      cin>>v;
      switch(v){
        case 1: k = ft_enter(); break;/*вызов функции ввод тектового файла в переменную к, чтоб по ней потом можно было делать сортировку, поиск и тд*/
        case 2: k = fs_enter(); break;// вызов функции ввод с экрана
        case 3: k = sort(k); print_list(k); break;// вызов 2 функций сортировки по переменной к, и вывод списка на экран
        case 4: search(k);break;//вызов функции поиск по переменной к и сохранение в файл одной строки
        case 5: fsearch(k); break;//вызов функции поиск файла с наибольшим количеством обращений к нему
        case 6: zmn(k); print_list(k); break;//вызов функции замена строки по указаному номеру
        case 7: k = del(k,pind(k)); print_list(k); break;// вызов функции удаление строки после указанного номера
        case 8: k = vst(k,pind(k)); print_list(k); break;//вызов функции вставка строки после указанного номера
        case 9: print_list(k);break;//вызов функции вывод списка на экран
        case 10:return; break;
 
        }
    } while(true);//цикл будет повтрятся
}
 
//ввод списка из текстового файла
sp* ft_enter(){
    char name[10];// символьный тип которое будет именем файла и его типом не больше 10знаков
    cout<<Rus("введи имя входн тип.файла")<<endl;
    cin>>name;// ввод имени и типа
    sp* list = new sp;    //создаем указатель на голову списка
    sp *ptr;  //указатель на элемент списка
    bool on=true; //флажок, который определяет, читаем ли мы первый элемент списка или последующие
    ifstream inf(name);//считывание файла по имени name в inf
    while (!inf.eof()){ // цикл пока не будет достигнут конец файла
        if(on){     //если до этого список был пуст, то
            ptr=list;  //записываем в него первый элемент
            on=false;
        }else{  //если список не пуст, то записываем в него текущий элемент (настраиваем указатель на след. элемент)
            ptr->next=new sp; //выделяем память под следующий элемент списка
            ptr=ptr->next;//ptr теперь указывает на тот элемент который был выделен строкой выше
        }
        inf>> ptr->elfile.name;   //читаем конкретные данные в текущий элемент списка
        inf>> ptr->elfile.data;
        inf>> ptr->elfile.upd;
        inf.ignore();
    }
    ptr->next=NULL; //для последнего элемента списка указатель на следующий элемент не определен/пуст (установлен в NULL)
    inf.close();//закрытие файла
    return list;  //  возвращаем указатель на первый элемент списка
}
 
 
//ввод списка с экрана
sp* fs_enter(){
    sp* list =new sp; //выделяем память под список
    sp *ptr; //указатель на элемент списка
    char name; // символьный тип которое будет именем файла и его типом
    cout<< Rus("Введиде имя, дату создания, кольчество обращений к файлу")<<endl;
    ptr=list; //теперь ptr указывает на список
   do   {
        cin>>ptr->elfile.name;
        cin>>ptr->elfile.data;
        cin>>ptr->elfile.upd;
        cout<<Rus("ещё (y/n)")<<endl;
        cin>>name;
        }while (name=='n')
        ptr->next=new sp; //выделяем память под строку
        ptr=ptr->next;//указываем на эту строку
 
   return list;} //возвращаем указатель на первый элемент списка
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2011, 04:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ошибка в функции подскажите как исправить (C++):

ошибка подскажите как исправить!! - C++
1&gt;d:\calcu\calcu\Form1.h(343): error C3861: strtoint32: идентификатор не найден int a; int b; a =...

Подскажите, в чем здесь ошибка? И как ее исправить...плиз! - C++
//Ошибка здесь!!!! void power (ulong m, ulong &amp;s, ulong &amp;t) { for (t=0, s=m; s%2==0; t++) s/=2; } ...

Ошибка error C2447: {: отсутствует заголовок функции. Как исправить?? - C++
Подскажите, пожалуйста, как исправить? #include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; const int maxV = 10000; ...

Ошибка 2 error C2447: {: отсутствует заголовок функции. Как исправить?? - C++
помогите пожалуста найти ошибку. #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include&lt;conio.h&gt; void main() { int a,i,j,b,s; ...

Подскажите как исправить ошибку - C++
Мужики, программы пишу на Dev-C++ И при любой программе выдаёт ошибку,как исправить это?

Подскажите как исправить функцию - C++
bool addNode(TNode *first, int key) { TNode* tmp=first; if(tmp-&gt;Right) addNode(tmp-&gt;Right,key); else ...

51
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
05.11.2011, 15:09  [ТС] #31
все таки функция вставки после введеного номера у меня работает не корректно((( замучался варианты с ней перебирать... во всех случаяъ работает норм кроме одного... суть функции если я выбираю номер строки 1 и ввожу допустим ter.txt 12.11.2009 4
допустим до вставки были такие списки то после ввода один файл тер должен добавится и оказаться вот где
1 bor.txt 12.11.2009 3
2 bir.txt 11.11.2009 4


1 bor.txt 12.11.2009 3
2 ter.txt 12.11.2009 4
3 bir.txt 11.11.2009 4(это правильное отображение) а получается вот такое

1 ter.txt 12.11.2009 4
2 bir.txt 11.11.2009 4(тоесть происходит замена первого а не вставка после первого, такое только в случае когда нажимаю первую строку... когда выбераю 2 или последущие то работает нормально) помогите исправить, весь день с ней уже мучаюсь(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//вставка нового элемента после элемента с адресом adr
sp * vst(sp *list,sp *adr){
    lfile rab;
    sp *pt=list,*q=new sp;
    cout<<"name=";
    cin>>rab.name;
    cout<<"data=";
    cin>>rab.data;
    cout<<"up=";
    cin>>rab.upd;
    q->elfile=rab;// в список на который ссылался q присваиваем строки rab
    if(adr==list){
        pt=q;
        q->next=adr->next;
    }else{
        q->next= adr->next;
        adr->next=q;
    }
    return pt;
}
Добавлено через 1 час 11 минут
help me
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 17:20 #32
её нужно переписать на номер элемента
иначе она не имеет смысла, так как адрес каждого элемента произвольный

Цитата Сообщение от lexflax
C++
1
//вставка нового элемента после элемента с адресом adr
перечисли адресы всех элементов списка
допустим, нужно вставить перед последним элементом, какой адрес у элемента перед ним ?
1
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
05.11.2011, 17:42  [ТС] #33
напишите плиз я своим умом это явно не сооброжу ....

Добавлено через 1 минуту
может вы имеели такую функцию ввиду
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//получить адрес
sp* pind(sp *list){
    sp *prt = list;
    int i=1,j=0;
    cout<<Rus("Введите номер")<<endl;
    cin>>j; //номер строки
    while (prt != NULL){
        if(i==j){
            return prt; //строка под этим номером
            break;
        }
        prt=prt->next;
        i++;
    } }
Добавлено через 16 минут
вот весь листинг моей контрольной
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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
# include <iostream>              // класс для работы с вводом-выводом
# include <windows.h>             // для функции    CharToOem();
# include <fstream>           // класс для работы с файлом
 
using namespace std;
    char bufRus[256];
    char* Rus(const char* text)
    {
        CharToOem(text, bufRus);
    return bufRus;
    }
 
struct lfile{
    char name[15];
    char data[10];
    int upd;
};
struct sp{
    lfile elfile;   // поле данных
    sp *next;   // указатель
};
 
sp*print_list(sp *list);//прототип функции вывод на экран
 
 
sp* ft_enter();//прототип функции ввод из текстового файла
 
sp* fs_enter();// прототип функции ввод с экрана
sp* sort(sp *list);// прототип сортировки
void search(sp *list); // прототип функций поиск по имени и вывод в файл
void fsearch(sp *list); //прототип функции поиск файла с наибольшим количеством обращений
 //
sp* pind(sp *list); //прототип получения адреса
sp* del(sp *list,sp *adr);// прототип функции удаления файла
sp * vst(sp *list,sp *adr);// прототип фунции вставка файла
void zmn(sp *list); // прототип функции замена файла
 
void main()
{
   int v;
   sp *k;
   do{
      cout<<Rus("  1: формирование списка из текстового файла")<<endl;
      cout<<Rus("  2: формирование списка с экрана")<<endl;
      cout<<Rus("  3: поиск по заданному полю с сохранением результатов в файле")<<endl;
      cout<<Rus("  4: выборка файла с наибольшим количеством обращений")<<endl;
      cout<<Rus("  5: замена записи")<<endl;
      cout<<Rus("  6: удаление записи после указанного адреса")<<endl;
      cout<<Rus("  7: вставка записи после указанного адреса")<<endl;
      cout<<Rus("  8: вывод списка")<<endl;
      cout<<Rus("  9: выход")<<endl;
      cout<<Rus("вариант ")<<endl;
      cin>>v;
      switch(v){
        case 1: k = ft_enter(); break;/*вызов функции ввод тектового файла в переменную к, чтоб по ней потом можно было делать сортировку, поиск и тд*/
        case 2: k = fs_enter(); break;// вызов функции ввод с экрана
        case 3: search(k);break;//вызов функции поиск по переменной к и сохранение в файл одной строки
        case 4: fsearch(k); break;//вызов функции поиск файла с наибольшим количеством обращений к нему
        case 5: zmn(k); print_list(k); break;//вызов функции замена строки по указаному номеру
        case 6: k = del(k,pind(k)); print_list(k); break;// вызов функции удаление строки после указанного номера
        case 7: k = vst(k,pind(k)); print_list(k); break;//вызов функции вставка строки после указанного номера
        case 8: print_list(k);break;//вызов функции вывод списка на экран
        case 9:return; break;
 
        }
    } while(true);//цикл будет повтрятся
}
 
//ввод списка из текстового файла
sp* ft_enter(){
    char name[10];// символьный тип которое будет именем файла и его типом не больше 10знаков
    cout<<Rus("введи имя входн тип.файла")<<endl;
    cin>>name;// ввод имени и типа
    sp* list = new sp;    //создаем указатель на голову списка
    sp *ptr;  //указатель на элемент списка
    bool on=true; //флажок, который определяет, читаем ли мы первый элемент списка или последующие
    ifstream inf(name);//считывание файла по имени name в inf
    while (!inf.eof()){ // цикл пока не будет достигнут конец файла
        if(on){     //если до этого список был пуст, то
            ptr=list;  //записываем в него первый элемент
            on=false;
        }else{  //если список не пуст, то записываем в него текущий элемент (настраиваем указатель на след. элемент)
            ptr->next=new sp; //выделяем память под следующий элемент списка
            ptr=ptr->next;//ptr теперь указывает на тот элемент который был выделен строкой выше
        }
        inf>> ptr->elfile.name;   //читаем конкретные данные в текущий элемент списка
        inf>> ptr->elfile.data;
        inf>> ptr->elfile.upd;
        inf.ignore();
    }
    ptr->next=NULL; //для последнего элемента списка указатель на следующий элемент не определен/пуст (установлен в NULL)
    inf.close();//закрытие файла
    return list;  //  возвращаем указатель на первый элемент списка
}
 
 
//ввод списка с экрана
sp *fs_enter()
{
        sp *list, *ptr;
        char name;
 
        cout << Rus("Введиде имя, дату создания, кольчество обращений к файлу") << endl;
        list = ptr = new sp;
        name = 'y';
        while (name == 'y'){
            cin >> ptr->elfile.name;
            cin >> ptr->elfile.data;
            cin >> ptr->elfile.upd;
            cin.get();
            ptr->next=NULL;
 
            cout << Rus("ещё (y/n)") << endl;
            cin >> name;
            cin.get();
            if (name == 'y') {
                ptr->next = new sp;
                ptr = ptr->next;
            }
        }
        return list;
}
 
//Функция вывода списка на экран, как параметр берёт указатель на список.
sp* print_list(sp *list){
    sp *prt = list;
    int i=0;
    do {
        cout<<++i<<"  ";// первый файл
        cout<<prt->elfile.name<<"      ";
        cout<<prt->elfile.data<<"      ";
        cout<<prt->elfile.upd<<endl;
        prt=prt->next;//следующий
 
    } while (prt!=0);
}
 
 
 
//поиск файла по имени и вывод его в текстовый файл
void search(sp *list){
    sp *prt = list;
    char f[15],r[15];
    cout<<Rus("введите текст")<<endl;
    cin>>f;
    cout<<Rus("введите выходной файл")<<endl;
    cin>>r;
    ofstream inf(r);
    while (prt!=NULL){
        if(strstr(prt->elfile.name,f)){ // сравнивает имя файла введенное с теми что в списке, если совпадает то выводит о нем всю информацию в другой файл
          inf<<prt->elfile.name<<"  ";
          inf<<prt->elfile.data<<"  ";
          inf<<prt->elfile.upd<<endl;
          prt=NULL;
        } else{
        prt=prt->next;}//переход на другую строку
    }
}
 
//Файл с наибольшим кольчеством обращений
void fsearch(sp *list){
     sp *prt = list;
     int p=-1;
     sp *r;
     while (prt != NULL){
        if(prt->elfile.upd > p){//если первое обращение больше другого
            p = prt->elfile.upd; // присвоить его значение в р
            r = prt; //запомнить максимум
 
        prt=prt->next;
        }
        else
     {
     cout<<Rus("Файл с наиольшим кольчеством обращений")<<endl;
     cout<<r->elfile.name<<" ";
     cout<<r->elfile.data<<" ";
     cout<<r->elfile.upd<<endl;
     }} prt=NULL;
}
 
//получить адрес
sp* pind(sp *list){
    sp *prt = list;
    int i=1,j=0;
    cout<<Rus("Введите номер")<<endl;
    cin>>j; //номер строки
    while (prt != NULL){
        if(i==j){
            return prt; //строка под этим номером
            break;
        }
        prt=prt->next;
        i++;
    } }
 
 
//удаление элемента с адресом adr
sp* del(sp *list,sp *adr){
    sp *pt=list, *q;
    if(adr==list){// если номер совпал то...
        q=adr->next;
        pt=q;
        q=adr->next;//
 
    }else{
        q = adr;
        adr=adr->next;
     }
    delete(q); //удаляет строку после указанного номера
    return pt;
}
 
//вставка нового элемента после элемента с адресом adr
sp * vst(sp *list,sp *adr){
    lfile rab;
    sp *pt=list,*q=new sp;
    cout<<"name=";
    cin>>rab.name;
    cout<<"data=";
    cin>>rab.data;
    cout<<"up=";
    cin>>rab.upd;
    q->elfile=rab;// в список на который ссылался q присваиваем строки rab
    if(adr==list){
        pt=q;
        pt->next=adr;
    }else{
        q->next= adr->next;
        adr->next=q;
    }
    return pt;
}
 
//заменить поле
void zmn(sp *list){
    sp *prt = list;
    int i=1,j=0;
    cout<<Rus("Введите номер")<<endl;
    cin>>j; // номер поля которое заминить
    while (prt != NULL){
        if(i==j){// если номер есть тоесть равен то..
        cout << Rus (" Введите имя нового файла");
    cin>>prt->elfile.name;
    cout << Rus (" Введите дату создания файла");
    cin>>prt->elfile.data;
    cout << Rus (" Введите количество обращений к файлу");
    cin>>prt->elfile.upd;
            break;
        }
        prt=prt->next;
 
        i++;
    }
}
Добавлено через 2 минуты
корректно не работает две функции это вставки и удаления... уже не знаю как исправить... переставлял по разному внутри функций все... но вставке все работает как надо только в одно случае работает не так когда ввожу допустим адрес один то он вставляет новый элемент не после первого а перед собой, в других случаях когда ввожу 2 или 3 или 4 то после вставляет вот как исправить не знаю(((
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 17:48 #34
Цитата Сообщение от lexflax
может вы имеели такую функцию ввиду
а, ну да, похоже, эта функция используется для получения адреса

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// вставка в список list нового элемента elem
// после элемента с номером n
sp *vst(sp *list, int n, sp *elem)
{
    sp *tmp;
    
    if (n == 0) {
        elem->next = list;
        return elem;
    }
 
    for (tmp = list;
         tmp->next != NULL && --n > 0;
         tmp = tmp->next)
        ;
    
    elem->next = tmp->next;
    tmp->next = elem;
    return list;
}
здесь нет создания элемента внутри функции
так должно быть везде
1
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
06.11.2011, 04:15  [ТС] #35
спасибо, щас мозги уже не соображают, завтра с утра попробую ваш вариант подставить или видо изменить под свой, отпишусь как получилось может по этому типу и удаление получится сделать корректным

Добавлено через 10 часов 23 минуты
Цитата Сообщение от accept Посмотреть сообщение
здесь нет создания элемента внутри функции
так должно быть везде
а почему так должно быть? мне ведь все таки надо вставить элемент а чтоб его вставить его надо создать и заполнить
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2011, 07:45 #36
Цитата Сообщение от lexflax
а почему так должно быть?
функция должна выполнять только свою задачу
она не должна делать то, что не относится к ней
например, где-то уже есть данные и надо только добавить эти данные в список
ты запускаешь функцию и она начинает у тебя запрашивать данные, зачем

поэтому ввод данных должен быть до вызова этой функции
в список можно добавлять по-разному:
1) можно передать узел, сформированный ранее
2) можно передать элементы, чтобы они были записаны в узел, создаваемый в функции
0
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
06.11.2011, 14:05  [ТС] #37
функция вставки у меня заработала как надо наконец то, вот листинг до изменения который был косячный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//вставка нового элемента после элемента с адресом adr
sp * vst(sp *list,sp *adr){
        lfile rab;
        sp *pt=list,*q=new sp;
        cout<<"name=";
        cin>>rab.name;
        cout<<"data=";
        cin>>rab.data;
        cout<<"up=";
        cin>>rab.upd;
        q->elfile=rab;// в список на который ссылался q присваиваем строки rab
        if(adr==list){
                pt=q;
                q->next=adr->next;
        }else{
                q->next= adr->next;
                adr->next=q;
        }
        return pt;
}
вот после изменений
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sp * vst(sp *list,sp *adr){
    lfile rab;
    sp *pt=list,*q=new sp;
    cout<<"name=";
    cin>>rab.name;
    cout<<"data=";
    cin>>rab.data;
    cout<<"up=";
    cin>>rab.upd;
    q->elfile=rab;// в список на который ссылался q присваиваем строки rab
    if(adr->next==list){
        q=list->next;
        pt=q;
 
    }else{
        q->next= adr->next;
        adr->next=q;
    }
    return pt;
}
с удалением пока что попрежнему не получается((( может сможите с удалением подсказать?
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2011, 14:12 #38
Цитата Сообщение от lexflax
вот после изменений
утечка памяти
q может потерять своё значение - адрес выделенного блока памяти
0
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
06.11.2011, 14:14  [ТС] #39
в каких случаях оно может потерять свое значение? че опять косяк какой то серьезный в функции? поясните пожалуйста подробней
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2011, 14:20 #40
Цитата Сообщение от lexflax
C++
1
        q=list->next;
вот в q записывается новый адрес, а старый теряется
0
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
06.11.2011, 15:48  [ТС] #41
блин но ведь работает то как надо))) или это серьезный косяк? почему тогда работает?

Добавлено через 1 час 25 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//удаление элемента с адресом adr
sp* del(sp *list,sp *adr){
sp *pt=list, *q;
if(adr==list){// если номер совпал то...
q=list->next;
pt=q;
//
 
}else{
q = adr;
adr=adr->next;
}
delete(q); //удаляет строку после указанного номера
return pt;
}
вот эта функция осталась последней которая с косяком работает... удаляет только первый элемент, а другие не хотит
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2011, 16:46 #42
Цитата Сообщение от lexflax
блин но ведь работает то как надо
если есть утечка памяти, то при многократном вызове этой функции программа будет занимать всё больше и больше памяти
1
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
06.11.2011, 16:48  [ТС] #43
весомый довод, но пока с ней приторможу работает и ладно щас хотя бы на отработку наладить по функции удаления не можите подсказать в чем косяк?
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2011, 16:48 #44
Цитата Сообщение от lexflax
C++
1
2
3
4
5
        while (prt != NULL){
                if(i==j){
                        return prt; //строка под этим номером
                        break;
                }
это из pind()
а зачем break после return ?
1
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
06.11.2011, 16:52  [ТС] #45
Цитата Сообщение от accept Посмотреть сообщение
это из pind()
а зачем break после return ?
не значем , забыл его убрать после передела функции контрольная эта вообще одногрупника моего, правда я сомневаюсь что он сам ее делал, потому что знаю какой он программист сам бы простую программу считывания текста из файла бы не написал не то что таккую контрольную, вот косяки его убираю и пытаюсь понять как че тут сделано, потому что она под мой вариант подходит, вот с фунцией удаления никак не могу справиться
0
06.11.2011, 16:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2011, 16:52
Привет! Вот еще темы с ответами:

Подскажите как исправить ошибку - C++
Здравствуйте! Подскажите, как исправить ошибку при выполнении программы: #include &lt;iostream&gt; #include &lt;stdarg.h&gt; using namespace std;...

Подскажите как исправить код - C++
ТЗ: В матрице в строках с отрицательным элементом на главной диагонали найти наибольший элемент строки и минимум среди них Мой...

Подскажите, как исправить ошибку - C++
void crop(char *str) { while (*str) { char i = 'q'; if (*str == ' ') { *str = i; //ошибка здесь cout &lt;&lt; str &lt;&lt; '\n'; ...

Подскажите как исправить ошибку - C++
писал программу по заданию и не могу понять где ошибка но у меня она решает не правильно Сформировать одномерный массив из целых чисел....


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

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