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

Ввод данных в массив структур

22.05.2021, 17:47. Показов 1568. Ответов 5

Студворк — интернет-сервис помощи студентам
Есть структура "banc_account" и функции, которые могу с ней работать, нужно с помощью функции set_banc_account заполнить массив структур, а потом вывести данные этих структур. Функции вроде как работают, но массив не заполняют, видно особенность cin, с которой я никак не могу разобраться (не хочет заполняться имя клиента банка). Так же нужно чтобы массив прекращал заполняться, когда имя введено не будет.


Вот код(может функции не так определил):

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
#include <iostream>
#include <cstring>
#include"banc_account.h" 
using namespace std;
 
const int SIZE = 10;
 
 
 
int main()
{
    cout << "Ann_____________" << endl;
    
    banc_account ann;
    set_banc_account(ann, "Ann Birdfree", 1250);
 show_banc_account(ann);
     
   cout << "Andy_____________" << endl;
     banc_account andy;
     set_banc_account(andy);
     show_banc_account(andy);
 
    cout << "Massive_________ " << endl;
 
    banc_account all_users[SIZE]; // massiv of structs
 
   // set_banc_account(all_users[0]);
   // show_banc_account(all_users[0]);
 
   int i = 0;
   while(i < SIZE && all_users[i].fullname != '\0')
   {
        set_banc_account(all_users[i]);
 
          i++;
   }
 
    //for(int i = 0; i < SIZE; i++)
  //  { 
  //      set_banc_account(all_users[i]);
   ////   
  //  }
    
    for(int a = 0; a<i; a++)
    { 
      cout << "User "<<"[" << a << "] ";
      show_banc_account(all_users[a]);
      
    
    }
    
    
    
    return 0;
}

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
#include"banc_account.h" 
#include <iostream>
 
#include<cstring>
 
 
void set_banc_account(banc_account &ba, const char *name, double bal)
{
    strcpy(ba.fullname, name);
    ba.balance = bal;
}
 
 int set_banc_account(banc_account &ba)
{
    
    std::cout <<"Enter a name: ";
    std::cin>>ba.fullname;
    //std::cin.get(ba.fullname, Len);
    //std::cin.get();
    //std::cin.clear();
   
    
    if(ba.fullname !="\0") 
    {
     std::cout <<"Enter a balance: ";
     std::cin >> ba.balance;
     
     return 1;
        
    }
    else return 0;
}
 
void change_balance(banc_account &ba, double new_balance)
{
    std::cout << "Enter a new balance: ";
    std::cin >> ba.balance;
}
 
void show_banc_account(const banc_account &ba)
{
   std::cout << "Your DATA:" << "\n";
    std::cout << "Name: " << ba.fullname << "\tbalance: " << ba.balance << '\n'; 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const int Len = 40;
struct banc_account
{
    char fullname[Len];
    double balance;
    
}; // объявили структуру, имя и баланс пользователя
 
 
 
void set_banc_account(banc_account &ba, const char *name, double bal);
//функция инициализирует структуру;
 
 
int set_banc_account(banc_account &ba);
//перегрузка;
// мы можем ввести имя и баланс, если ввели имя, то функция возвращает 1, если не ввели - 0;
 
void change_balance(banc_account &ba, double new_balance);
// устанавливаем новый баланс;
 
void show_banc_account(const banc_account &ba);
// показываем данные структуры;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.05.2021, 17:47
Ответы с готовыми решениями:

Ввод данных в динамический массив структур
Помогите правильно написать функцию - сколь не пробовал, не получается - getinfo(), которая требует ввода данных о студентах. Она...

Динамический массив структур, ввод строки
По заданию нужно создать именно динамический массив структур, используя операцию new. #include &lt;iostream&gt; #include...

Динамический массив структур(ввод и вивод)
#include&lt;iostream&gt; #include&lt;string&gt; using namespace std; struct date1 { char* month; int year; }; struct building{ ...

5
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
22.05.2021, 18:06
Цитата Сообщение от danila2228 Посмотреть сообщение
&& all_users[i].fullname != '\0'
1. символьные массивы так не сравниваются
2. откуда уверенность что неинициализированное поле будет " '\0' " или " !'\0' ", что бы это ни означало ?
3.
Цитата Сообщение от danila2228 Посмотреть сообщение
std::cin>>ba.fullname;
Цитата Сообщение от danila2228 Посмотреть сообщение
set_banc_account(ann, "Ann Birdfree", 1250);
Если через std::cin писать что-то с пробелом - считываие до пробела. То что после останется в потоке и, кое-где тут, попытается залезть в double
1
1 / 1 / 0
Регистрация: 18.05.2021
Сообщений: 6
23.05.2021, 10:26  [ТС]
Folian, спасибо огромное, но как мне исправить ошибки, как написать то? Чтобы я заполнял имя и фамилия, счет до момента, когда имя введено не будет.

Как я понял, нужно, чтобы сравнить символьные массивы использовать, strcmp.
C++
1
strcmp(all_users[i].fullname, "\0")
так?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
23.05.2021, 11:29
danila2228, посмотрите пример сортировки символьных массивов например здесь:
Структуры
но зачем создавать проблемы, чтобы потом их решать ? почему бы вместо char fullname[Len]; не записать
C++
1
string fullname;
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
23.05.2021, 13:10
Лучший ответ Сообщение было отмечено danila2228 как решение

Решение

Кликните здесь для просмотра всего текста
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
//#include"banc_account.h" 
using namespace std;
 
const int SIZE = 3;
 
//const int Len = 40;
struct banc_account
{
    static const int Len = 40;
    char fullname[Len] = { '\0' };
    double balance = 0.0;
}; // объявили структуру, имя и баланс пользователя
 
void set_banc_account(banc_account& ba, const char* name, double bal)
{
    strcpy(ba.fullname, name);
    ba.balance = bal;
}
 
int set_banc_account(banc_account& ba)
{
 
    std::cout << "Enter a name: ";
    //std::cin >> ba.fullname;
 
    std::cin.getline(ba.fullname, ba.Len);
 
 
    if (strlen(ba.fullname))
    {
        std::cout << "Enter a balance: ";
        std::cin >> ba.balance;
        std::cin.ignore();
 
        return 1;
    }
    /*else */
    return 0;
}
 
void change_balance(banc_account& ba, double new_balance)
{
    std::cout << "Enter a new balance: ";
    std::cin >> ba.balance;
    std::cin.ignore();
}
 
void show_banc_account(const banc_account& ba)
{
    std::cout << "Your DATA:" << "\n";
    std::cout << "Name: " << ba.fullname << "\tbalance: " << ba.balance << '\n';
}
 
 
int main()
{
    cout << "Ann_____________" << endl;
 
    banc_account ann;
    set_banc_account(ann, "Ann Birdfree", 1250);
    show_banc_account(ann);
 
    cout << "Andy_____________" << endl;
    banc_account andy;
    set_banc_account(andy);
    show_banc_account(andy);
    
    cout << "Massive_________ " << endl;
 
    banc_account all_users[SIZE]; // massiv of structs
 
    int i = 0;
    while(i < SIZE && set_banc_account(all_users[i])) ++i;
    /*while (i < SIZE && all_users[i].fullname != '\0')
    {
        set_banc_account(all_users[i]);
 
        i++;
    }*/
 
    for (int a = 0; a < i; a++)
    {
        cout << "User " << "[" << a << "] ";
        show_banc_account(all_users[a]);
    }
 
 
//  system("pause");
    return 0;
}



Цитата Сообщение от danila2228 Посмотреть сообщение
так?
Если собираешься узнавать, записано ли в all_users[i].fullname палка и ноль - да.
"\0" - строка, '\0' - символ. " - кавычка, ' - апостроф.
Пустоту char-строки можно и без strcmp смотреть, с '\0' - достаточно all_users[i].fullname[0] == '\0';
в примере выше сделал через длину строки, что может и помедленнее, но иначе лень.
Но это всё будет работать при том что строка была нормально инициализирована, в противном случае нет никакой гарантии что там хоть где-то будет ноль.

Добавлено через 11 минут
Цитата Сообщение от Folian Посмотреть сообщение
Если собираешься узнавать, записано ли в all_users[i].fullname палка и ноль - да.
Ерунду написал, эти символы и в строках читаются и я ими ж регулярно пользуюсь.
но всё равно "\0" - странно выглядящая весчь.
2
1 / 1 / 0
Регистрация: 18.05.2021
Сообщений: 6
23.05.2021, 17:27  [ТС]
Всё понятно, спасибо. Удачи вам и здоровья!!!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.05.2021, 17:27
Помогаю со студенческими работами здесь

Вектор структур, ввод данных из файла
Проблемы с перегрузкой операторов ввода и вывода для класса и структуры. Перегрузка ввода для структуры написана, и, полагаю, пашет, но не...

Ввод в массив структур через указатель на структуру
Доброго времени суток. Такая вот проблема... После ввода мне отображается массив структур только везде отображаются последние данные ...

Ввод из текстового файла значений в массив, состоящий из четырех структур
1. Описать структуру с именем STUDENT, содержащую следующие поля: • NAME - фамилия и инициалы; • Номер группы; •...

Реализуйте ввод исходных данных (массива структур) из текстового файла
Реализуйте ввод исходных данных (массива структур) из текстового файла. Текстовый файл должен содержать информацию о количестве записей и,...

Ввод с клавиатуры данных в массив, состоящий из 10 структур типа STUDENT
Помогите пожалуйста. Выдает в строке NAME: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM а потом имя. Как убрать буквы M? #include...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru