Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/64: Рейтинг темы: голосов - 64, средняя оценка - 4.63
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84

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

22.03.2010, 17:39. Показов 12332. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2010, 17:39
Ответы с готовыми решениями:

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

Как описать элемент Bitmap в структуре
Как описать в структуре состоящей из элементов типа int и TBitmap последний. struct { int d; type??? bmp; }

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

11
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 17:44
C++
1
2
//...
char fio[25], model[25], colour[10];
0
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 17:45
Вот пример объявления строки.
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
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 17:47
Еще напутано с вложенностью структур-объединений. Достаточно было бы сделать так:
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
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 17:48
Цитата Сообщение от Nameless One Посмотреть сообщение
C++
1
2
//...
char fio[25], model[25], colour[10];

Это резонно использовать в Си, ну зачем это использовать в плюсах когда есть замечательный класс cstring?? И проблем с ним меньше)
0
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
22.03.2010, 17:48
Считать строку с пробелами можно с помощью cin.getline(buf, SIZE), где buf - переменная, куда считываем, SIZE - размер переменной.
0
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
22.03.2010, 17:50  [ТС]
О, спасибо вам, сейчас попробую..
cstring?
Можно пример?
И пример с гетлайном хотелось бы..
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 17:52
Также у тебя внутри объединения объявлена безымянная структура, и при этом не создается ни одного ее экземпляра, т.е. ты никак не сможешь добраться до полей этой структуры (то же самое и с объединением)

Добавлено через 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
Сообщений: 84
22.03.2010, 17:53  [ТС]
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
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 17:55
Цитата Сообщение от Repak5 Посмотреть сообщение
Это резонно использовать в Си, ну зачем это использовать в плюсах когда есть замечательный класс cstring?? И проблем с ним меньше)
Никто и не спорит, но тогда уж лучше подключать ни cstring, a string (по крайней мере, в моей IDE), т.к. для строк из cstring'a не перегружены операции ввода-вывода в стандарные потоки.

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

Добавлено через 1 минуту
Всё, спасибо. Сейчас всё прочитаю подробно и пойму. =)
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 18:10
Опять-таки говорю, не вижу смысла во вложенных структурах, объединениях в контексте данной задачи (тем более, что объединения, ввиду своей специфики, используются довольно редко).
В принципе, это можно было бы сделать так:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.03.2010, 18:10
Помогаю со студенческими работами здесь

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

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

Описать процедуру, записывающую слова списка как строки
type слово = array of char; список = аrrау of слово; Описать процедуру зап(l, t), записывающую слова списка l как строки в текстовый...

Перестановка верхней и нижней строки в структуре
Привет. Я вам тут покушать принес. В массиве структур нужно поменять местами верхнюю и нижнюю строки. Вот весь код: #define...

Проверить принадлежность строки определенной структуре
Можно как-то определить имеет ли строка определенную структуру. Например есть строки node1='/tmp/comp/text' node2='/tmp/comp' Данный...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru