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

Не присваиваеться переменная - C++

Восстановить пароль Регистрация
 
 
vadim09
6 / 6 / 1
Регистрация: 04.08.2012
Сообщений: 62
08.04.2013, 19:48     Не присваиваеться переменная #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
void Init(VideoShop *a, int n)
{
    setlocale(LC_ALL, "russian");
    char *buff;//Создаю буферный массив
    a = new VideoShop [n];//Создаю массив структур
    cout<<"Заполнение стркутуры.\n";
    for( int i=0; i<n; i++)
    {
        buff = new char[100];//Выделяю память, что б мало не казалось
        cout<<"\tВведите назване фильма : ";
        fflush(stdin);//Очищаю буфер потока
        gets(buff);//записываю вводимую строку в буферный массив
        (a+i)->name = new char [strlen(buff)+1];//Выделяю память под элемент структуры столько,                 сколько символов содержиться в вводимой строке
        (a+i)->name = buff;//копирую данные с буферного массива в элемент поле структуры
        delete[] buff;//удаляю буферный массив
        cout<<a->name;//вывожу на экран (Если delete[] buff; закоментировать, то выводиться то что и ввели)
        buff = new char[100];//Дальше делаем тоже самое для каждого поля.
        cout<<"\tРежиссер : ";
        fflush(stdin);
        gets(buff);
        (a+i)->director = new char [strlen(buff)+1];
        (a+i)->director = buff;
        delete[] buff;
 
        buff = new char[100];
        cout<<"\tЖанр : ";
        fflush(stdin);
        gets(buff);
        (a+i)->genre = new char [strlen(buff)+1];
        (a+i)->genre = buff;
        delete[] buff;
 
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 19:48     Не присваиваеться переменная
Посмотрите здесь:

C++ переменная
Как вывести на экран переменную из функции, которой присваиваеться значение через указатель? C++
C++ Переменная
Переменная-счетчик C++
Мультитипная переменная C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vadim09
6 / 6 / 1
Регистрация: 04.08.2012
Сообщений: 62
09.04.2013, 14:51  [ТС]     Не присваиваеться переменная #21
Вот та функция, с которой проблемы:
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
void Search(VideoShop *a, int n)
{
        cout<<"Поиск по : \n";
        cout<<"1)Названию фильма.\n";
        cout<<"2)Режиссеру.\n";
        cout<<"3)Жанру. : \n";
        cout<<"4)Самый популярный фильм по : \n";
        cout<<"5)Показ всех записей и добавление.\n";
        short int key=0;
        char *Buff = new char[100];
        cin>>key;
            switch (key)
            {
            case 1 ://Название фильма
                    fflush(stdin);//Очистка буффера
                    gets(Buff);//Ввод данных
                    for(int i=0; i<n; i++)
                    {
                        if(strstr((a+i)->name, Buff))//если данные совпали с названием фильма
                        {
                            Show((a+i));//вывод структуры на экран
                        }
                    }               //И так далее
                    break;
 
                case 2 ://Режиссер
                    for(int i=0; i<n; i++)
                    {
                        fflush(stdin);
                        gets(Buff);
                        if(strstr((a+i)->director, Buff))
                            Show(a);
                    }
                    break;
 
                case 3 ://Жанр
                    for(int i=0; i<n; i++)
                    {
                        fflush(stdin);
                        gets(Buff);
                        if(strstr((a+i)->genre, Buff))
                            Show(a);
                    }
                    break;
 
                case 4 ://Самый популярный фильм
                    cout<<"\n\t1)Жанру : ";
                    cout<<"\n\t2)Режиссеру : ";
                    cout<<"\n\t3)Названию : ";
                    cout<<"\n";
                    cin>>key;
 
                    switch (key)
                    {
                        case 1 ://Жанр
                            {
                                int k=-1;
                                VideoShop **arr = new VideoShop* [17];//[17] потому что такое приблизительное количество жанров [url]http://ru.wikipedia.org/wiki/Жанры_киноискусства[/url]
 
                                VideoShop *Max;//Создаем указатель для максимального значения
                                fflush(stdin);//Очищаем буффер
                                gets(Buff);//Вводим название жанра
                                for(int i=0; i<n; i++)
                                {
                                    if(strstr((a+i)->genre, Buff))//Если вводимое название совпадает то
                                    {
                                        k++;//счетчик
                                        arr[k]=(a+i);//В массив записываем все структуры, с одинаковым жанром
                                        //cout<<(*arr+k)->genre;//Проверка
                                    }
                                }
                                for(int i = 0; i <= k; i++)//Поиск структуры с наибольшей популярностью
                                {
                                    for(int j = i; j <= k; j++)
                                    {                                       
                                        if( (*arr+i)->rating > (*arr+j)->rating)
                                            Max = (*arr+i);//Наибольшая структура по популярности и жанру
                                    }
                                }
                                Show(Max);//Вывод на экран
                                break;
                            }
 
                        //case 2 ://Режисер
                        //  {
                        //      int k=0;
                        //      VideoShop *arr = new VideoShop [17];//[
 
                        //      VideoShop *Max;//Создаем указатель для максимального значения
                        //      fflush(stdin);//Очищаем буффер
                        //      gets(Buff);//Вводим название жанра
                        //      for(int i=0; i<n; i++)
                        //      {
                        //          if(strstr((a+i)->director, Buff))//Если вводимое название совпадает то
                        //          {
                        //              k++;//счетчик
                        //              arr[k]=a[i];//В массив записываем все структуры, с одинаковым жанром
                        //          }
                        //      }
                        //      for(int i = 0; i < k; i++)//Поиск структуры с наибольшей популярностью
                        //      {
                        //          for(int j =0; j < k; k++)
                        //          {                                       
                        //              if((arr+i)->rating < (arr+j)->rating)
                        //                  Max = (arr+j);//Наибольшая структура по популярности 
                        //          }
                        //      }
                        //      Show(Max);//Вывод на экран
                        //      break;
                        //  }
 
                        //case 3 ://Название
                        //  {
                        //      int k=0;
                        //      VideoShop *arr = new VideoShop [17];//[
 
                        //      VideoShop *Max;//Создаем указатель для максимального значения
                        //      fflush(stdin);//Очищаем буффер
                        //      gets(Buff);//Вводим название жанра
                        //      for(int i=0; i<n; i++)
                        //      {
                        //          if(strstr((a+i)->name, Buff))//Если вводимое название совпадает то
                        //          {
                        //              k++;//счетчик
                        //              arr[k]=a[i];//В массив записываем все структуры, с одинаковым жанром
                        //          }
                        //      }
                        //      for(int i = 0; i < k; i++)//Поиск структуры с наибольшей популярностью
                        //      {
                        //          for(int j =0; j < k; k++)
                        //          {                                       
                        //              if((arr+i)->rating < (arr+j)->rating)
                        //                  Max = (arr+j);//Наибольшая структура по популярности 
                        //          }
                        //      }
                        //      Show(Max);//Вывод на экран
                        //      break;
                        //  }
                    }
                    /*break;
 
                case 5 ://Добавление и вывод на экран
                    break;*/
            }
}
Добавлено через 6 минут
Ну так вот, почему не хочет работать 21-я строка? Что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kelos
 Аватар для kelos
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 3
09.04.2013, 20:26     Не присваиваеться переменная #22
C++ (Qt)
1
cout<<(*arr+k)->genre;
приоритеты операций учим

Добавлено через 7 минут
C++ (Qt)
1
Show((a+i));//вывод структуры на экран
согласно прототипу
C++ (Qt)
1
void Show(VideoShop a);
функция Show принимает в качестве параметра экземпляр структуры по значению, функция же
C++ (Qt)
1
void Search(VideoShop *a, int n);
принимает указатель на структуру, который вы и хотите передать в функцию Show в качестве параметра, то бишь, имеет место несоответствие типов
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 20:32     Не присваиваеться переменная #23
Цитата Сообщение от vadim09 Посмотреть сообщение
Есть функция, которая выводит выводит на экран структуру. Вот её прототип void Show(VideoShop *a);
Несоответсвие типов компилятор покажет.
kelos
 Аватар для kelos
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 3
09.04.2013, 21:03     Не присваиваеться переменная #24
vadim09, обновите код в шапке до актуального в данный момент

Добавлено через 24 минуты
C++ (Qt)
1
    VideoShop shop, a;
дорогой, а где, собственно, выделение памяти под сам масив? вижу обявление одного экземпляра, который вы затем
C++ (Qt)
1
    a = Init(&shop, n);//Заполнение структуры
заполняете, что, впрочем, не мешает вам обращаться к нему
C++ (Qt)
1
2
3
4
5
6
7
                    for(int i=0; i<n; i++)
                    {
                        if(strstr((ar+i)->name, Buff))//если данные совпали с названием фильма
                        {
                            Show(ar+i*sizeof(ar));//вывод структуры на экран
                        }
                    }
как к массиву.
Если бы вы воспользовалмсь дебаггером, вы бы увидели, что он выдает ошибку "cannot evaluate..." и бла бла бла
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 00:31     Не присваиваеться переменная
Еще ссылки по теме:

C++ Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
C++ Неинициализированная переменная
C++ Междупроектная переменная

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

Или воспользуйтесь поиском по форуму:
vadim09
6 / 6 / 1
Регистрация: 04.08.2012
Сообщений: 62
11.04.2013, 00:31  [ТС]     Не присваиваеться переменная #25
Ребята, всем спасибо! Уже со всем разобрался.
Тему можно закрывать
Yandex
Объявления
11.04.2013, 00:31     Не присваиваеться переменная
Ответ Создать тему
Опции темы

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