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

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

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

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

04.11.2011, 04:58. Просмотров 1887. Ответов 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;} //возвращаем указатель на первый элемент списка
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2011, 04:58     ошибка в функции подскажите как исправить
Посмотрите здесь:

C++ Подскажите, в чем здесь ошибка? И как ее исправить...плиз!
подскажите как исправить ошибку C++
Ошибка 2 error C2447: {: отсутствует заголовок функции. Как исправить?? C++
Подскажите как исправить ошибку C++
ошибка подскажите как исправить!! C++
C++ Ошибка error C2447: {: отсутствует заголовок функции. Как исправить??
Подскажите как исправить ошибку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
05.11.2011, 05:19  [ТС]     ошибка в функции подскажите как исправить #21
да строка с нулем исчезла но появился другой дефект, если ввожу больше одной строки то вылетает и выдает такое окно Project Project3.exe raised exception class Eaccess Violetion with message 'Eaccess Violetion'

Добавлено через 14 минут
Цитата Сообщение от accept Посмотреть сообщение
name = 'y';
* * * * while (name == 'y'){
* * * * * * cin >> ptr->elfile.name;
* * * * * * cin >> ptr->elfile.data;
* * * * * * cin >> ptr->elfile.upd;
* * * * * * cin.get();
* * * * * * ptr->next = NULL:
( вот эту строчку не пропускает выдает ошибку)

Добавлено через 24 секунды
Цитата Сообщение от accept Посмотреть сообщение
name = 'y';
* * * * while (name == 'y'){
* * * * * * cin >> ptr->elfile.name;
* * * * * * cin >> ptr->elfile.data;
* * * * * * cin >> ptr->elfile.upd;
* * * * * * cin.get();
* * * * * * ptr->next = NULL:
( вот эту строчку не пропускает выдает ошибку)
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 05:20     ошибка в функции подскажите как исправить #22
C++
1
2
3
4
        case 2:
            k = fs_enter();
            cout << "fs_enter: ok" << endl;
            break;
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
05.11.2011, 05:22  [ТС]     ошибка в функции подскажите как исправить #23
а тут что не так?
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 05:25     ошибка в функции подскажите как исправить #24
у тебя сама структура содержит маленькие массивы
тебе надо сделать их с запасом и учитывать нуль-символ, который добавляется в конце

Добавлено через 1 минуту
Цитата Сообщение от lexflax
а тут что не так?
поставь вывод сообщения, когда функция отработала
чтобы знать, что ошибка в ней/не в ней
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
05.11.2011, 05:27  [ТС]     ошибка в функции подскажите как исправить #25
не совсем понял, вы имели ввиду что при вызове функции допустим удаления , тужа же внести функцию вывода на экран чтоб сразу видеть результат? помогите плиз еще с функцией удаления и вставки они у меня тоже косячно работают(((
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 05:30     ошибка в функции подскажите как исправить #26
когда функция готова, нужно после её вызова вывести сообщение, что она выполнилась
иначе можно увидеть ошибку, произошедшую в другой функции, и принять её за ошибку, произошедшую в этой функции
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
05.11.2011, 05:42  [ТС]     ошибка в функции подскажите как исправить #27
понял, у меня ошибка в функции вставки элемента...
//вставка нового элемента после элемента с адресом adr
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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->next){
        pt=q;
        q->next=adr;
    }else{
        q->next= adr->next;
        adr->next=q;
    }
    return pt;
}
вот в чем ошибка:
Допустим я открываю текстовый файл и оттуда считываю список
1 ron.txt 12.11.2001
2 fen.txt 11.11.2008 ( о щас проверил работает все))))) а вот удаление не работает как надо если ввожу удалить первую строчку то удаляет, если вторую то никак не реагирует...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//удаление элемента с адресом adr
sp* del(sp *list,sp *adr){
    sp *pt=list, *q;
    if(adr==list){// если номер совпал то...
        pt=adr->next;//  перейти на другую строку
        q=adr;// запомнить ее
    }else{
        q = adr->next;
        adr=adr->next;
     }
    delete(q); //удаляет строку после указанного номера
    return pt;
}
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 06:03     ошибка в функции подскажите как исправить #28
Цитата Сообщение от lexflax
C++
1
//удаление элемента с адресом adr
это неправильный подход
нужно удалять элемент с определённым номером
при удалении там должен быть цикл, пропускающий элементы до нужного
вставка - точно так же
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
05.11.2011, 06:19     ошибка в функции подскажите как исправить #29
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
struct ecl{
    ecl* next;
    char* str;
};
 
struct string{
    ecl* head;
    int size;
};
 
int main()
{
    string str;
    //нчало списка
    str.size=10;
    str.head=new ecl;
    //итератор
    ecl* p;
    p=str.head;
    char* c=new char;
 
    //чтение
    while(1){
        p->str=new char[str.size+1];
        int i;
        for(i=0; i<str.size ;i++){
            std::cin.read(c,1);
            p->str[i]=*c;
            if(*c=='\n'){i++ ;break;}
        }
        p->str[i]=0;
        if(*c=='\n')break;
        p->next=new ecl;
        p=p->next;
        p->next=NULL;
    }
    std::cout<<"\n";
    for(p=str.head;p;p=p->next)
        std::cout<<p->str;
 
    //редактирование
    char* tmp=new char[str.size*2];
    int rez;
    for(p=str.head; p ;p=p->next){
        rez=0;
        for(int i=0; i<str.size*2 && i-rez!=str.size+1 ; i++){
            if(p->str[i]==',' || p->str[i]=='.'){
                tmp[i]=p->str[i-rez];
                tmp[i+1]=' ';
                i++;
                rez++;
            }
            else tmp[i]=p->str[i-rez];
        }
        
        delete p->str;
        p->str=new char[strlen(tmp)+1];
        strcpy(p->str,tmp);
    }   
 
    for(p=str.head;p;p=p->next)
        std::cout<<p->str;
    //удаление
    p=str.head->next;
    for(;p;str.head=p,p=p->next){
        delete str.head->str;
        delete str.head;
    }
    delete str.head;
    return 0;
}
можно как-то так)
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 06:31     ошибка в функции подскажите как исправить #30
Цитата Сообщение от Глупец
C++
1
char* c=new char;
C++
1
    char c;
Добавлено через 1 минуту
Цитата Сообщение от Глупец
можно как-то так)
это какая-то другая задача
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
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 17:20     ошибка в функции подскажите как исправить #32
её нужно переписать на номер элемента
иначе она не имеет смысла, так как адрес каждого элемента произвольный

Цитата Сообщение от lexflax
C++
1
//вставка нового элемента после элемента с адресом adr
перечисли адресы всех элементов списка
допустим, нужно вставить перед последним элементом, какой адрес у элемента перед ним ?
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 то после вставляет вот как исправить не знаю(((
accept
4819 / 3239 / 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;
}
здесь нет создания элемента внутри функции
так должно быть везде
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
06.11.2011, 04:15  [ТС]     ошибка в функции подскажите как исправить #35
спасибо, щас мозги уже не соображают, завтра с утра попробую ваш вариант подставить или видо изменить под свой, отпишусь как получилось может по этому типу и удаление получится сделать корректным

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

поэтому ввод данных должен быть до вызова этой функции
в список можно добавлять по-разному:
1) можно передать узел, сформированный ранее
2) можно передать элементы, чтобы они были записаны в узел, создаваемый в функции
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;
}
с удалением пока что попрежнему не получается((( может сможите с удалением подсказать?
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2011, 14:12     ошибка в функции подскажите как исправить #38
Цитата Сообщение от lexflax
вот после изменений
утечка памяти
q может потерять своё значение - адрес выделенного блока памяти
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
06.11.2011, 14:14  [ТС]     ошибка в функции подскажите как исправить #39
в каких случаях оно может потерять свое значение? че опять косяк какой то серьезный в функции? поясните пожалуйста подробней
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2011, 14:20     ошибка в функции подскажите как исправить
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2011, 14:20     ошибка в функции подскажите как исправить #40
Цитата Сообщение от lexflax
C++
1
        q=list->next;
вот в q записывается новый адрес, а старый теряется
Yandex
Объявления
06.11.2011, 14:20     ошибка в функции подскажите как исправить
Ответ Создать тему
Опции темы

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