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

Вывод структуры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.73
Алексей...
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 6
05.07.2011, 14:44     Вывод структуры #1
Необходимо создать структуру 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;
}
 Комментарий модератора 
Используйте теги форматирования кода.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2011, 14:44     Вывод структуры
Посмотрите здесь:

вывод структуры C++
Структуры, некорректный вывод C++
C++ Вывод данных из структуры
Вывод структуры каталога C++
C++ Вывод структуры из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
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
An1ka
65 / 70 / 2
Регистрация: 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;
    }
};
diagon
05.07.2011, 15:00
  #4

Не по теме:

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

Bers
Заблокирован
05.07.2011, 15:01     Вывод структуры #5
An1ka, стандартные потоки разве со стандартным стрингом работать не умеют? ))
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
05.07.2011, 15:13     Вывод структуры #6
Цитата Сообщение от Bers Посмотреть сообщение
An1ka, стандартные потоки разве со стандартным стрингом работать не умеют? ))
С нашими структурами не умеют !
Код
	car my_car;
	cout << my_car;
Для этого и нужна перегрузка оператора, чтобы выводить сразу все данные по нашей структуре.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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;
}
co6ak
Кошковед
 Аватар для co6ak
403 / 496 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
05.07.2011, 15:23     Вывод структуры #8
а почему имя по-английки, а где по-русски?
либо одно, либо другое! а то смотрится как-то дико. типо ID бога машины
Алексей...
0 / 0 / 0
Регистрация: 06.02.2009
Сообщений: 6
05.07.2011, 15:46  [ТС]     Вывод структуры #9
спасибо! да стоит подучить работу с динамический массивом.
Bers
Заблокирован
05.07.2011, 15:52     Вывод структуры #10
Цитата Сообщение от An1ka Посмотреть сообщение
С нашими структурами не умеют !
Код
	car my_car;
	cout << my_car;
Для этого и нужна перегрузка оператора, чтобы выводить сразу все данные по нашей структуре.
Идея понятна, но я бы так делать не стал. Слишком не гибко...

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

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

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

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

/зы а для френдов должна быть оч весская причина.
Алексей...
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];
Bers
Заблокирован
05.07.2011, 16:01     Вывод структуры #12
ага))
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.07.2011, 16:08     Вывод структуры #13
Цитата Сообщение от Bers Посмотреть сообщение
о более гибким решением будит манипулятор.
Bers, пример можете привести? пожалуйста
Bers
Заблокирован
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;
}
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
05.07.2011, 16:26     Вывод структуры #15
Bers, а почему бы не сделать эту функцию внутри структуры ? Внешние функции - это нарушение инкапсуляции
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.07.2011, 16:30     Вывод структуры #16
Цитата Сообщение от Bers Посмотреть сообщение
using name std;
Что-то не вижу сдесь никаких манипуляторов.
И что это за фигня? Да и еще и 2 раза прописаная, использование пространства имен using namespace распространяется на весь файл.
И если уж пошло использование свободной функции, то надо бы по константной ссылке передавать.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
05.07.2011, 16:36     Вывод структуры #17
какая инкапсуляция? тут структура из двух открытых членов, POD тип, а вы тут какую то бодягу развели friend operator<< и прочее

C++
1
cout << car.name  << car.god;
так надо
Bers
Заблокирован
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 Посмотреть сообщение
Внешние функции - это нарушение инкапсуляции

С какой стати?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2011, 16:56     Вывод структуры
Еще ссылки по теме:

Вывод структуры, строка как элемент структуры C++
Вывод структуры в файл C++ C++
Вывод структуры в файл C++ C++

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
05.07.2011, 16:56     Вывод структуры #20
Цитата Сообщение от Maxwe11 Посмотреть сообщение
то, что как-то влияет на ввод/вывод в/из потока
Не очень четкое определение.

1. Манипуляторы не обязательно должны быть как то связаны именно с потоками.
2. Функция ViewCar() как то влияет на вводы/вывод/из потока ?
Yandex
Объявления
05.07.2011, 16:56     Вывод структуры
Ответ Создать тему
Опции темы

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