Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/181: Рейтинг темы: голосов - 181, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 6
1

Вывод структуры

05.07.2011, 14:44. Показов 35143. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо создать структуру car которая хранит след инф наименование, год выпуска.написать прогр которая запросить пользователя сколько авто необходимо включить в каталог,затем программа должна выделить динамический массий new.далее должна пригласить пользователя ввести значения и отобразить содержимое каждой структуры что в общем то не получается:
поясните как вывести всё содержимое.


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
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
struct car
{
    string name;
    int god;
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int catalog;
    cout<<"skolko avto vkl v catalog? ";
    cin>>catalog;
    cin.get();
    car *ps=new car;
    for(int i=0;i<catalog;i++)
    {
        cout<<"VVedite proizvoditelya: ";
        getline(cin,ps->name);
        //cin.get();
        cout<<"Ukazhite god vypuska: ";
        cin>>ps->god;
        
        cin.get();
    }
    cout<<"Vasha colleczia: "<<endl;
    
    
        cout<<ps->god<<" "<<ps->name<<endl;
            
 
    cin.get();
    return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2011, 14:44
Ответы с готовыми решениями:

Вывод структуры, строка как элемент структуры
Описать структуру с именем TRAIN, содержащую следующие поля: □ название пункта назначения;...

Не могу понять как делать вывод на экран структуры STUDENT на заполнение и вывод данных на экран
Добрый вечер. Вот задание и мой код программы на C++ Не выходит нормально реализовать 3е...

вывод структуры
В одномерном массиве, элементами являются записи структуры: фамилия, имя, возраст, средняя...

Вывод структуры в файл C++
Необходимо предоставить возможность сохранения таблицы в файл и чтения её из файла с помощью типа...

19
Заблокирован
05.07.2011, 14:56 2
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
[quote=Алексей...;1819400]
 
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
struct car
{
    string name;  //марка машины
    int god;         //год выпуска
};
int _tmain(int argc, _TCHAR* argv[])
{
   int catalog;  //здесь храним количество наименований в каталоге.
   cout<<"Введите количество марок автомобилей в каталоге:  ";
   cin>>catalog;
   
   //car *ps=new car;  //вот здесь ваша ошибка. Вам стоит подучить работу с дин. массивами.
 
   car* ArrayCar = new [catalog];  //создадим дин. массив.
 
   //создадим каталог 
   for( int i=0; i<catalog; ++i )
   {
       cout<<"введите марку автомобиля: ";
       cin >> ArrayCar[i].name;
       cout<<"введите год выпуска: ";
       cin>>ArrayCar[i].god;
   }
 
   //отобразим содержимое каждой структуры.
   cout<<"Содержимое каталога: "<<endl;
   
   for( int i=0; i< catalog; ++i)
   {
       cout << i<< ") ";
       cout << ArrayCar[i].name;
       cout << " год выпуска ";
       cout << ArrayCar[i].god << endl;
   }
   //правда просто?
 
  delete [] ArrayCar; ArrayCar=NULL; //не забываем освобождать память!!
 
   cin.get();
   return 0;
}
[/quote]
12345676
2
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
05.07.2011, 14:59 3
Цитата Сообщение от Алексей... Посмотреть сообщение
отобразить содержимое каждой структуры
Самое простое, это сделать перегрузку оператора <<
C++
1
2
3
4
5
6
7
8
9
struct car
{
    string name;
    int god;
    friend ostream& operator << ( ostream& s, car& my )
    {
        return cout << "name= " << my.name << " god= " << my.god << endl;
    }
};
0
diagon
05.07.2011, 15:00
  #4

Не по теме:

Цитата Сообщение от An1ka Посмотреть сообщение
my.god
omg =)

6
Заблокирован
05.07.2011, 15:01 5
An1ka, стандартные потоки разве со стандартным стрингом работать не умеют? ))
0
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
05.07.2011, 15:13 6
Цитата Сообщение от Bers Посмотреть сообщение
An1ka, стандартные потоки разве со стандартным стрингом работать не умеют? ))
С нашими структурами не умеют !
Код
	car my_car;
	cout << my_car;
Для этого и нужна перегрузка оператора, чтобы выводить сразу все данные по нашей структуре.
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.07.2011, 15:19 7
An1ka,
Цитата Сообщение от An1ka Посмотреть сообщение
friend ostream& operator << ( ostream& s, car& my )
{
return cout << "name= " << my.name << " god= " << my.god << endl;
}
C++
1
2
3
4
friend ostream& operator << ( ostream& s, car& my )
{
    return s << "name= " << my.name << " god= " << my.god << endl;
}
1
Кошковед
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
05.07.2011, 15:23 8
а почему имя по-английки, а где по-русски?
либо одно, либо другое! а то смотрится как-то дико. типо ID бога машины
0
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 6
05.07.2011, 15:46  [ТС] 9
спасибо! да стоит подучить работу с динамический массивом.
0
Заблокирован
05.07.2011, 15:52 10
Цитата Сообщение от An1ka Посмотреть сообщение
С нашими структурами не умеют !
Код
	car my_car;
	cout << my_car;
Для этого и нужна перегрузка оператора, чтобы выводить сразу все данные по нашей структуре.
Идея понятна, но я бы так делать не стал. Слишком не гибко...

Структура не должна догадываться, зачем она понадобилась вызывающей стороне.
И не должна догадываться, как саму себя отображать.

Структура должна только быть. Хранить свои поля и все.

Если так сильно не хочется обременять вызывающую сторону задачей самостоятельно отображать её, то более гибким решением будит манипулятор.

То есть, структура поставляется с набором неких функций-манипуляторов, которые умеют выполнять какие то типовые задачи.

/зы а для френдов должна быть оч весская причина.
0
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 6
05.07.2011, 16:00  [ТС] 11
C++
1
car* ArrayCar = new [catalog];
здесь всё таки может так надо
C++
1
car* ArrayCar = new car[catalog];
0
Заблокирован
05.07.2011, 16:01 12
ага))
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.07.2011, 16:08 13
Цитата Сообщение от Bers Посмотреть сообщение
о более гибким решением будит манипулятор.
Bers, пример можете привести? пожалуйста
0
Заблокирован
05.07.2011, 16:22 14
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
#include "stdafx.h"
#include <iostream>
#include <string>
 
using name std;
 
struct car
{
    string name;  //марка машины
    int god;         //год выпуска
};
 
void ViewCar( car &Cource)
{
      using name std;     
      cout << Cource.name  <<  " год выпуска: " <<  Cource.god;
}
 
void ViewArrayCar( car *ArrayCource)
{
    //отобразим содержимое каждой структуры.
   cout<<"Содержимое каталога: "<<endl;
   
   for( int i=0; i< catalog; ++i)   
   {    
         cout << i<< ") ";   
         ViewCar(  ArrayCource[i]  );   
         cout << endl;   
    }
}
 
 FreeCar( car *ArrayCource ) {   delete [] ArrayCource ; ArrayCource =NULL;   }
 
void CreateArrayCar(car *ArrayCource , unsigned int Kol)
{
    FreeCar( ArrayCource );     ArrayCource = new car[Kol];  
 
   //создадим каталог 
   for( int i=0; i<Kol; ++i )
   {
       cout<<"введите марку автомобиля: ";
       cin >> ArrayCource [i].name;
       cout<<"введите год выпуска: ";
       cin>>ArrayCource [i].god;
   }
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
   int catalog;  //здесь храним количество наименований в каталоге.
   cout<<"Введите количество марок автомобилей в каталоге:  ";
   cin>>catalog;
 
  car * ArrayCar = NULL;
  
  CreateArrayCar(ArrayCar  , catalog);
 
  ViewArrayCar(ArrayCar);
 
  FreeCar(ArrayCar ); 
 
   cin.get();
   return 0;
}
0
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
05.07.2011, 16:26 15
Bers, а почему бы не сделать эту функцию внутри структуры ? Внешние функции - это нарушение инкапсуляции
1
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.07.2011, 16:30 16
Цитата Сообщение от Bers Посмотреть сообщение
using name std;
Что-то не вижу сдесь никаких манипуляторов.
И что это за фигня? Да и еще и 2 раза прописаная, использование пространства имен using namespace распространяется на весь файл.
И если уж пошло использование свободной функции, то надо бы по константной ссылке передавать.
0
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
05.07.2011, 16:36 17
какая инкапсуляция? тут структура из двух открытых членов, POD тип, а вы тут какую то бодягу развели friend operator<< и прочее

C++
1
cout << car.name  << car.god;
так надо
0
Заблокирован
05.07.2011, 16:48 18
Цитата Сообщение от Maxwe11 Посмотреть сообщение
Что-то не вижу сдесь никаких манипуляторов.
И что это за фигня? Да и еще и 2 раза прописаная, использование пространства имен using namespace распространяется на весь файл.
И если уж пошло использование свободной функции, то надо бы по константной ссылке передавать.
1. Что вы подразумеваете под словом "манипулятор"
2. Верно, но мне было влом подчищать. В своём собственном коде я вообще стараюсь не
использовать using name std;
По крайне мере, так опасно-глобально.

Добавлено через 4 минуты
Цитата Сообщение от An1ka Посмотреть сообщение
struct car
{
* * * * string name;
* * * * int god;
* * * * friend ostream& operator << ( ostream& s, car& my )
* * * * {
* * * * * * * * return cout << "name= " << my.name << " god= " << my.god << endl;
* * * * }
};

Отвечаю на ваш вопрос: Манипуляторы тем и отличаются от родных методов, что они живут отдельно. Можно вообще держать класс в одном файле, а набор манипуляторов - в другом. И если манипуляторы не нужны - просто не грузить их.

Если же зашить функцию-обработчик внутрь самой структуры (френдов это тоже касается), то вы намертво привязываете стримы к вашей структуре.

Теперь, везде, где будит юзацца ваша структура, в программу нужно будит грузить и стримы. Даже если пользователю нафег не нужны ни стримы, ни консоль, а информацию он хочет выводить на экран через OpenGL своим собственным образом.

Добавлено через 1 минуту

Не по теме:



кто нить, объясните, почему делая цитату кода, она с какими то звездочками высвечивается?



Добавлено через 2 минуты
Цитата Сообщение от An1ka Посмотреть сообщение
Внешние функции - это нарушение инкапсуляции

С какой стати?
1
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.07.2011, 16:50 19
Цитата Сообщение от Bers Посмотреть сообщение
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <string>
 
using namespace std;
 
struct car
{
    string name;  //марка машины
    int god;         //год выпуска
};
 
ostream & tab (ostream & out)
{
    return out << '\t';
}
 
ostream & operator << (ostream & out, const car & mc)
{
    return out << mc.name << tab << mc.god;
}
 
int main()
{
    int catalog;  //здесь храним количество наименований в каталоге.
    cout<<"Введите количество марок автомобилей в каталоге:  ";
    cin>>catalog;
 
    car* ArrayCar = new car[catalog];  //создадим дин. массив.
 
   //создадим каталог 
    for( int i=0; i<catalog; ++i )
    {
        cout<<"введите марку автомобиля: ";
        cin >> ArrayCar[i].name;
        cout<<"введите год выпуска: ";
        cin>>ArrayCar[i].god;
    }
 
   //отобразим содержимое каждой структуры.
    cout<<"Содержимое каталога: "<<endl;
   
    for( int i=0; i< catalog; ++i)
    {
        cout << i << ")" << tab << ArrayCar[i] << '\n';
    }
   //правда просто?
 
    delete [] ArrayCar; ArrayCar=NULL; //не забываем освобождать память!!
    cin.get();
    return 0;
}
1
Заблокирован
05.07.2011, 16:56 20
Цитата Сообщение от Maxwe11 Посмотреть сообщение
то, что как-то влияет на ввод/вывод в/из потока
Не очень четкое определение.

1. Манипуляторы не обязательно должны быть как то связаны именно с потоками.
2. Функция ViewCar() как то влияет на вводы/вывод/из потока ?
0
05.07.2011, 16:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2011, 16:56
Помогаю со студенческими работами здесь

Вывод значения из структуры
Никак не могу додуматься как вывести определенные фамилии, если удовлетворяют условию: if...

Вывод содержимого структуры
нужно вывести массив Y , но в цикле вылазит ошибка С2679.#include&lt;iostream&gt; #include&lt;string&gt;...

Вывод данных из структуры
Как сделать чтобы выводились данные заданного дня пользователем из структуры?

Вывод структуры в файл
Здравствуйте, у меня есть вопрос. У меня есть структура с большим количеством переменных. Работа...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru