Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
6 / 6 / 0
Регистрация: 04.08.2012
Сообщений: 62

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

08.04.2013, 19:48. Показов 2193. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Такая проблема :
Есть структура данных, данные заполняю с клавиатуры. Потом хочу эти же данные вывести на экран, но, тут вылетает ошибка.
Потом, думаю, буду выводить на экран сразу после заполнения одной строки - всё нормально выводиться, но перед этим данные я записываю в буферный массив, и потом их копирую в саму структуру. Пред удалением буферного массива всё нормально, но после его удаления, на экране появляются странные символы, и они одинаковые при разных значениях строк. Вот сам код :
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;
 
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.04.2013, 19:48
Ответы с готовыми решениями:

Как вывести на экран переменную из функции, которой присваиваеться значение через указатель?
Только начал изучать С++. И не могу понять, как вывести на экран переменную pdLocalVar из функции child(), которой присваивается значение в...

Переменная=Документ.имя. Сделать выборку всех документов с именем Переменная
Привет всем. У меня есть проблема и варианты решения, но они не работают. Проблема вот такая: Есть переменная Документ1 в...

Проблема с Adodc: 'Переменная объекта или переменная блока With не задана'
В свойствах самого контрола (MS ADO Data Control) проверка подключения к атблице (подключаюсь через ODBC) проходит нормально. Когда же...

24
6 / 6 / 0
Регистрация: 04.08.2012
Сообщений: 62
09.04.2013, 14:51  [ТС]
Студворк — интернет-сервис помощи студентам
Вот та функция, с которой проблемы:
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-я строка? Что не так?
0
 Аватар для kelos
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 3
09.04.2013, 20:26
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 в качестве параметра, то бишь, имеет место несоответствие типов
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 20:32
Цитата Сообщение от vadim09 Посмотреть сообщение
Есть функция, которая выводит выводит на экран структуру. Вот её прототип void Show(VideoShop *a);
Несоответсвие типов компилятор покажет.
0
 Аватар для kelos
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 3
09.04.2013, 21:03
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..." и бла бла бла
0
6 / 6 / 0
Регистрация: 04.08.2012
Сообщений: 62
11.04.2013, 00:31  [ТС]
Ребята, всем спасибо! Уже со всем разобрался.
Тему можно закрывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.04.2013, 00:31

Модульная переменная или блочная статическая переменная: что лучше
Переменная (тип String) нужна на всем протяжении работы программы. Нужен совет опытных - что предпочтительнее: модульная переменная или...

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0; } /* foo.cpp */

Public переменная, или private переменная и функции get/set
Пишу свой класс, который потом будет много где использоваться и пытаюсь осознать, как правильнее и, что самое главное, почему. Вариант 1:...

Пустая переменная выводится как %переменная%
Когда %var% ещё пустая, echo %var% выдаёт не пустоту (или &quot;Режим вывода команд на экран (ECHO) отключен&quot;), а вот так выдаёт,...

Какое значение примет переменная после выполнения фрагмента алгоритма, если переменная а имела значение 'ИНФОРМАТИКА'
Имеется фрагмент алгоритма, записанный на алгоритмическом языке: m := 10 b := Извлечь(а, m) нц для k от 4 до 5 с := Извлечь(а,...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru