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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.78
Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
#1

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

22.03.2010, 17:39. Просмотров 3701. Ответов 11
Метки нет (Все метки)

Приветствую всех :)
Только учусь писать на с++ (жаль, что в универе он у нас "полностью на самостоятельном изучении"). И вот возникла необходимость создания "базы данных", куда бы заносилась некоторая информация (какая - понятно из текста задачи, но это не важно). На данном этапе я хочу организовать ввод данных (аналог типа "записи" на паскале), но возникает проблема с введением целой строки. Облазил кучу форумов и не смог разобраться, как мне в структуре описать строку. Тут, как я посмотрю, какая - то фишка, ибо классический ввод массива чаров здесь не прокатывает.. Хелп плиз.. =)
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();
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2010, 17:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как описать строки в структуре? (C++):

Как описать в структуре строку не через указатель - C++
Есть структура struct InfoBuf { size_t Len; char Data; / ??? static InfoBufType* Create(size_t Size, char* Val){ InfoBufType*...

Структуры и строки (как поменять значение строки в структуре?) - C++
Вопрос: как поменять значение строки в структуре? То есть, есть такой код: struct CandyBar; { char name; double m; ...

Ввод строки в структуре, заданной как char *str через scanf (ПОМОЩЬ) - C++
struct {char *str;} A; scanf(&quot;%s&quot;, &amp;A.str); Аварийное завершение программы после ввода. Если задавать вручную значение внутри...

Не могу не как описать не которые строки в программе - C++
что обозначаеться prn_matrix int last_min

Сравнение строки в структуре с переменной типа char - C++
Есть некая функция Х которая возвращает кол-во строк структуры Poezda a, строка a.StNazn в которой равна введеному с клавиатуры c и создает...

Описать функцию, что добавляет N символов строки S2 в конец строки S1 - C++
Помогите пожалуйста с выполнением лабораторной работы. Задание: 1. Разработать и реализовать функцию на языке С. 2. Провести ее...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
22.03.2010, 17:44 #2
C++
1
2
//...
char fio[25], model[25], colour[10];
0
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 когда работаешь со строками
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
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];
};
0
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?? И проблем с ним меньше)
0
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
22.03.2010, 17:48 #6
Считать строку с пробелами можно с помощью cin.getline(buf, SIZE), где buf - переменная, куда считываем, SIZE - размер переменной.
0
Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
22.03.2010, 17:50  [ТС] #7
О, спасибо вам, сейчас попробую..
cstring?
Можно пример?
И пример с гетлайном хотелось бы..
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
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;
};
0
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'
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
22.03.2010, 17:55 #10
Цитата Сообщение от Repak5 Посмотреть сообщение
Это резонно использовать в Си, ну зачем это использовать в плюсах когда есть замечательный класс cstring?? И проблем с ним меньше)
Никто и не спорит, но тогда уж лучше подключать ни cstring, a string (по крайней мере, в моей IDE), т.к. для строк из cstring'a не перегружены операции ввода-вывода в стандарные потоки.

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

Добавлено через 1 минуту
Всё, спасибо. Сейчас всё прочитаю подробно и пойму. =)
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2010, 18:10
Привет! Вот еще темы с ответами:

Как присвоить значения структуре? - C++
У меня есть структура с картами (масть и достоинство карты): struct Card { char mast; char dostoinstvo; } Таких карт...

Как заполнить вектор в структуре? - C++
как заполнить вектор в структуре?? struct pupil { vector &lt;string&gt; a; } я делал так: pupil f; f.a.push_back(&quot;qwerty&quot;); что не...

Как создать указатель в структуре? - C++
Я хочу ввести имя, но под name надо выделить память? Если да то как и где(где менно прописывать выделение памяти)? #include&lt;iostream&gt; ...

как отсортировать в структуре данные - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;locale&gt; #include &lt;fstream&gt; using namespace std; struct Grup{ char...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.03.2010, 18:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru