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

Как описать строки в структуре? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.78
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
22.03.2010, 17:39     Как описать строки в структуре? #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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Lab4.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <clocale>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
int n=1;
 
int vvod();
int vivod();
 
 
struct avto
{
    union 
    {
        struct
        {
            char fio,model,colour;
            int god,data;
        };
        int t[5];
    };
};
avto a[20];
int main()
{
    setlocale(LC_CTYPE,"Russian");
    cout<<"                               Добро пожаловать!\n\n\n";
    cout<<"Сколько записей нужно сделать?\n";
    cin>>n;
    vvod();
    vivod();
    _getch();
}
 
int vvod()
{
    if ((n>0)&(n<21))
    {
        cout<<"Теперь введите "<<n<<" записей\n"; //Подправить падежи
        for (int i=0;i<n;i++)
        {
            avto;
            cout<<"Введите ФИО владельца авто\n";
            cin>>a[i].fio;
            cout<<"Введите модель\n";
            cin>>a[i].model;
            cout<<"Введите цвет\n";
            cin>>a[i].colour;
            cout<<"Введите год выпуска\n";
            cin>>a[i].god;
            cout<<"Введите год прохождения техосмотра\n";
            cin>>a[i].data;
        }
 
    }
    return 0;
}
int vivod()
{
    cout<<a[2].fio;
    return 0;
    _getch();
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.03.2010, 17:44     Как описать строки в структуре? #2
C++
1
2
//...
char fio[25], model[25], colour[10];
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 17:45     Как описать строки в структуре? #3
Вот пример объявления строки.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <cstring> //объявляем класс строк
 
int main()
{
      string TestStr1, TestStr2, TestStr3; //3 переменные типа строки
      TestStr1="Программирование ";
      TestStr2="рулит!";
      TestStr3=TestStr1+TestStr2;
      printf("%s",TestStr3); //В итоге на экран выведется фраза "Программирование рулит!"
      getch();
}
Функции для работы со строками посмотри в интернете или справочнике. З.Ы. Не забывай подключать класс cstring когда работаешь со строками
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.03.2010, 17:47     Как описать строки в структуре? #4
Еще напутано с вложенностью структур-объединений. Достаточно было бы сделать так:
C++
1
2
3
4
5
6
7
8
9
union avto
{
   struct
   {
      char fio[25], model[25], colour[10];
      int god, data;
   } st;
   int t[5];
};
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 17:48     Как описать строки в структуре? #5
Цитата Сообщение от Nameless One Посмотреть сообщение
C++
1
2
//...
char fio[25], model[25], colour[10];

Это резонно использовать в Си, ну зачем это использовать в плюсах когда есть замечательный класс cstring?? И проблем с ним меньше)
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
22.03.2010, 17:48     Как описать строки в структуре? #6
Считать строку с пробелами можно с помощью cin.getline(buf, SIZE), где buf - переменная, куда считываем, SIZE - размер переменной.
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
22.03.2010, 17:50  [ТС]     Как описать строки в структуре? #7
О, спасибо вам, сейчас попробую..
cstring?
Можно пример?
И пример с гетлайном хотелось бы..
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.03.2010, 17:52     Как описать строки в структуре? #8
Также у тебя внутри объединения объявлена безымянная структура, и при этом не создается ни одного ее экземпляра, т.е. ты никак не сможешь добраться до полей этой структуры (то же самое и с объединением)

Добавлено через 1 минуту
И вообще, не понятно в контексте задачи, почему нельзя ограничится одной структурой:
C++
1
2
3
4
5
struct avto
{
      char fio[25], model[25], colour[10];
      int god, data;
};
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
22.03.2010, 17:53  [ТС]     Как описать строки в структуре? #9
Nameless One, вот,ч то получается:
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(47): error C2039: 'fio' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(49): error C2039: 'model' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(51): error C2039: 'colour' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(53): error C2039: 'god' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(55): error C2039: 'data' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(63): error C2039: 'fio' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.03.2010, 17:55     Как описать строки в структуре? #10
Цитата Сообщение от Repak5 Посмотреть сообщение
Это резонно использовать в Си, ну зачем это использовать в плюсах когда есть замечательный класс cstring?? И проблем с ним меньше)
Никто и не спорит, но тогда уж лучше подключать ни cstring, a string (по крайней мере, в моей IDE), т.к. для строк из cstring'a не перегружены операции ввода-вывода в стандарные потоки.

Добавлено через 51 секунду
Leonidus, все потому, что
Цитата Сообщение от Nameless One Посмотреть сообщение
у тебя внутри объединения объявлена безымянная структура, и при этом не создается ни одного ее экземпляра, т.е. ты никак не сможешь добраться до полей этой структуры (то же самое и с объединением)
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
22.03.2010, 17:57  [ТС]     Как описать строки в структуре? #11
Если использовать одну структуру, то всё работает, спасибо.
Теперь просто интересно, что надо сделать, чтобы всё это описалось в объединении.. Хотя на данном этапе моего развития это врятли пригодится..)

Добавлено через 1 минуту
Всё, спасибо. Сейчас всё прочитаю подробно и пойму. =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2010, 18:10     Как описать строки в структуре?
Еще ссылки по теме:

как отсортировать в структуре данные C++
Как описать в структуре строку не через указатель C++
C++ Как присвоить значения структуре?

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.03.2010, 18:10     Как описать строки в структуре? #12
Опять-таки говорю, не вижу смысла во вложенных структурах, объединениях в контексте данной задачи (тем более, что объединения, ввиду своей специфики, используются довольно редко).
В принципе, это можно было бы сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
struct mystruct
{
   union
   {
      struct
      {
         int f;
      } mys;
   } myu;
};
 
int main()
{   
    mystruct s;
    s.myu.mys.f=15;
    std::cout << s.myu.mys.f << std::endl;
    system("pause");
    return 0;
}
Здесь мы объявляем безымянные объединение и структуру, но при этом создаем по одному их экземпляру, что в дальнейшем позволит нам добраться до содержимого "внутренней" структуры.

Добавлено через 4 минуты
О, спасибо вам, сейчас попробую..
cstring?
Можно пример?
И пример с гетлайном хотелось бы..
Вот пример программы, которая выводит в консоль свой исходный код (пусть исходник называется "main.cpp"):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <fstream>
#include <string>
 
int main()
{   
    std::ifstream ifs("main.cpp");
    std::string string;
    while(std::getline(ifs, string))
        std::cout << string << std::endl;
    system("pause");
    return 0;
}
Yandex
Объявления
22.03.2010, 18:10     Как описать строки в структуре?
Ответ Создать тему
Опции темы

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