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

string массив - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.98
EpicLove
 Аватар для EpicLove
46 / 2 / 0
Регистрация: 19.04.2011
Сообщений: 48
05.03.2012, 15:15     string массив #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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// Lab_1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
 
int main()
{
            setlocale(LC_ALL,"Russian"); // русский язык !1!111! ^^,
    int x, login, password;
    /* Массивы для записи в файл */
    int account[10];
    string lname[10];
    string name[10];
    double balance[10];
    /* Массивы для записи в файл */
    login = 1;
    password = 2;
    cout << "Логин : "; 
    cin >> login;
    cout << "Пароль : ";
    cin >> password;
 
    if (login !=1 || password != 2)
    {
        cout << "Эй, не взламывай мою систему! >:[" << endl;
        return main();
    }
    else if (login == 1 && password == 2)
    {
        cout << "|| " << " Меню " << " ||" << endl;
        cout << "1. Создание TXT-файла" << endl;
        cout << "2. Добавить счет" << endl;
        cout << "3. Обновление счета" << endl;
        cout << "4. Удаление счета" << endl;
        cout << "5. Выйти" << endl << endl;
 
 
        cout << "Введите цифру выбранного вами действия : ";
        cin >> x;
 
    if (x == 1)
            {
                ofstream file("C:\\Счета.txt", ios::out);
                
                /* TODO: Закцикливаеться при "yes", а при "no" мгновенный выход. 
                cout << "Вернуться в начальное меню ?" << endl;
                cin >> yes_no;
                    
                 if (yes_no = true)
                {
                    return main();
                }
                else if (yes_no = false)
                {
                    exit(1);
                }*/ 
            }
        if (x == 2)
            { /* TODO: Создать массив который будет добавлять 
                        Счет        Фамилия     Имя     Баланс
                        account[]       lname[]    name[]  balance[]
                TODO: Нужно создать вводимый мной массив
              */
 
                ofstream file("C:\\Счета.txt", ios::out  | ios::app );
                    file << s4et[100] << "\n";
                    file.close();
                   
            }
        if (x == 3)
            {
                cout << "Хм... ладно, сделаем нумерацию счетов 1-2-3 до 100 и будем обновлять эти счета по строкам" << endl;
            }
        if (x == 4)
            { // В банке счета не удаляют, их закрывают - в конце строки после номера счета нужно добавлять "Закрыто"
                cout << "Удалеяем нумерацию счета 1-2-3-4, если удаляем 3 счет, то предыдущий счет не должен изменяться" << endl;
            }
 
}
system("PAUSE");
 
}
Нужно добавлять текст в файл в определенном порядке:

Счет Фамилия Имя Баланс
account[] lname[] name[] balance[]
Как сделать добавление ?
Был бы признателен некому примеру кода и материалу на данную тему.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
05.03.2012, 15:21     string массив #2
EpicLove, не знаю почему нельзя просто создать 4 строки: account, lname, name, balance(думаю типа int), а потом просто записать их по очереди в файл. Также можно создать структуру. Но думаю здесь и так не будет сверхсложный код с 4-етыремя лишними переменными.
Пример структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct account
{
    int accNumber;
    int balance;
    string name;
    string lname;
}
 
//....
 
account a;
cout << "vvodyay nomer accaunta" << endl;
cin >> a.accNumber;
Цитата Сообщение от EpicLove Посмотреть сообщение
if (login == 1 && password == 2)
лишнее

ЗЫ А лучше выкладывайте задание!
EpicLove
 Аватар для EpicLove
46 / 2 / 0
Регистрация: 19.04.2011
Сообщений: 48
05.03.2012, 16:04  [ТС]     string массив #3
ЗЫ А лучше выкладывайте задание!
Задание :
4 Требования к программному изделию.
4.1 Требования к функциональным характеристикам
4.1.1 Система должна обеспечить выполнение следующих функций:
• создание текстового файла о счетах клиентов банка;
• добавление нового счета клиента;
• обновление счета клиента;
• удаление счета клиента.
4.1.2 Исходные данные:
• номер счета клиента (от 1 до 100);
• фамилия;
• имя;
• баланс клиента.
4.1.3 Результаты:
• список счетов клиентов банка;
• сведения о новом счете клиента банка;
• сведения об обновлении счета клиента банка;
• сведения об удалении счета клиента банка.
4.2 Требования к надежности
4.2.1 Предусмотреть контроль открытия файлов.
4.2.2 Предусмотреть контроль ввода номера счета
(от 1 до 100)
4.3 Требования к составу и параметрам технических средств
4.3.1 Система должна работать на ПК IBM PC
4.3.2 Минимальная конфигурация:
• тип процессора – Pentium;
• объем ОЗУ – 32 Мб
4.4 Требования к информационной и программной
совместимости.
Добавлено через 4 минуты
Логин : 1
Пароль : 2
|| Меню ||
1. Создание TXT-файла
2. Добавить счет
3. Обновление счета
4. Удаление счета
5. Выйти

Введите цифру выбранного вами действия : 2
Для продолжения нажмите любую клавишу . . .
А мне надо, когда нажимаешь на 2 , то должен быть доступ для ввода и запись сразу в файл.

Структуру сделал так :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            struct bank
            {
            protected:
            /* Массивы для записи в файл */
                    int account[99];
                    char lname[15];
                    char name[15];
                    short balance[10];
            /* Массивы для записи в файл */
            public:
                void getBank()
                {
                    cout << "Введите номер счета: "; cin >> account[99];
                    cout << "Введите Фамилию: "; cin >> lname[15];
                    cout << "Введите Имя: "; cin >> name[15];
                    cout << "Какой баланс будет на счету: "; cin >> balance[20];
                }
            };
Нужно что бы account lname name и balance записывались в файл.

Сделал по примеру из учебника :

C++
1
2
                ofstream outfile("C:\\Счета.txt", ios::binary );
                    outfile.write (reinterpret_cast<char*>(&b), sizeof(b));
Но когда перехожу на действие под цифрой "2" в файл записывается лишь "МММММММММММММММММММММ...."

Добавлено через 16 минут
Немного прочитал про ввод данных файл и по массивам.

Сделал так :

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
94
95
96
// Lab_1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>
using namespace std;
 
int main()
{
            setlocale(LC_ALL,"Russian"); // русский язык !1!111! ^^,
 
    struct bank
            {
            protected:
            /* Массивы для записи в файл */
                    int account[99];
                    string lname[15];
                    string name[15];
                    int balance[20];
            /* Массивы для записи в файл */
            public:
                void getBank()
                {
                    cout << "Введите номер счета: "; cin >> account[99];
                    cout << "Введите Фамилию: "; cin >> lname[15];
                    cout << "Введите Имя: "; cin >> name[15];
                    cout << "Какой баланс будет на счету: "; cin >> balance[20];
                }
            };
    int x, login, password;
    bank b;
    login = 1;
    password = 2;
    cout << "Логин : "; 
    cin >> login;
    cout << "Пароль : ";
    cin >> password;
 
    if (login !=1 || password != 2)
    {
        cout << "Эй , не взламывай мою систему! >:[" << endl;
        return main();
    }
        cout << "|| " << " Меню " << " ||" << endl;
        cout << "1. Создание TXT-файла" << endl;
        cout << "2. Добавить счет" << endl;
        cout << "3. Обновление счета" << endl;
        cout << "4. Удаление счета" << endl;
        cout << "5. Выйти" << endl << endl;
 
 
        cout << "Введите цифру выбранного вами действия : ";
        cin >> x;
 
    if (x == 1)
            {
                ofstream file("C:\\Счета.txt", ios::out);
                
                /* TODO: Закцикливаеться при "yes", а при "no" мгновенный выход. 
                cout << "Вернуться в начальное меню ?" << endl;
                cin >> yes_no;
                    
                 if (yes_no = true)
                {
                    return main();
                }
                else if (yes_no = false)
                {
                    exit(1);
                }*/ 
            }
        if (x == 2)
            { /* TODO: Создать массив который будет добавлять 
                        Счет        Фамилия     Имя     Баланс
                        account[]       lname[]    name[]  balance[]
                TODO: Нужно создать вводимый мной массив
              */
            b.getBank();
                ofstream outfile("C:\\Счета.txt", ios::binary );
                    outfile.write (reinterpret_cast<char*>(&b), sizeof(b));                
            }
        if (x == 3)
            {
                cout << "Хм... ладно, сделаем нумерацию счетов 1-2-3 до 100 и будем обновлять эти счета по строкам" << endl;
            }
        if (x == 4)
            { // В банке счета не удаляют, их закрывают - в конце строки после номера счета нужно добавлять "Закрыто"
                cout << "Удалеяем нумерацию счета 1-2-3-4, если удаляем 3 счет, то предыдущий счет не должен изменяться" << endl;
            }
 
system("PAUSE");
 
}
Но когда доходит до ввода Баланс, выдает ошибку
Unhandled exception at 0x5c45155b (msvcp80d.dll) in Lab_1.exe: 0xC0000005: Access violation writing location 0xcccccccc.
Думаю ошибка где-то тут

ofstream outfile("C:\\Счета.txt", ios::binary );
outfile.write (reinterpret_cast<char*>(&b), sizeof(b));

Так-же запись в файл идет символами "ММММММММММ ММММММММ"

-------------------
Мат убрал, извиняюсь.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
05.03.2012, 16:50     string массив #4
Цитата Сообщение от EpicLove Посмотреть сообщение
outfile.write (reinterpret_cast<char*>(&b), sizeof(b));
записывайте отдельно по полям.
з.ы. подумайте, как в вашем случае записываются в файл поля типа string
з.з.ы. и почему у вас массивы строк(string)?
EpicLove
 Аватар для EpicLove
46 / 2 / 0
Регистрация: 19.04.2011
Сообщений: 48
05.03.2012, 17:20  [ТС]     string массив #5
з.з.ы. и почему у вас массивы строк(string)?
Для того что бы можно было вводить "Имя/фамилию"
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
05.03.2012, 17:25     string массив #6
для имени достаточно одной строки, а не массива, если канеш имя не что-то вроде Карл Август Эрих Великий (которое вам захочется представить как массив составных))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2012, 18:01     string массив
Еще ссылки по теме:

C++ String в массив
Преобразовать string в массив char C++
Преобразовать string в массив byte[] C++

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

Или воспользуйтесь поиском по форуму:
EpicLove
 Аватар для EpicLove
46 / 2 / 0
Регистрация: 19.04.2011
Сообщений: 48
05.03.2012, 18:01  [ТС]     string массив #7
Как правильно тогда написать код для записи в файл ?
Что бы не изменял в char формат

Читаю книгу и практически везде там используется (char*)
Yandex
Объявления
05.03.2012, 18:01     string массив
Ответ Создать тему
Опции темы

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