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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Двумерный массив в динамической памяти как поле класса http://www.cyberforum.ru/cpp-beginners/thread332132.html
Здравствуйте! Вот так можно описать двумерный массив в дин.памяти. class nameClass { public: MapPlaceTp ** roomMap; setArr ( ); };
C++ перегрузка оператора присваевания Не могу разобраться как перегрузить оператор присваивания так чтобы выводило правильно то есть a = 15; c = 7.8; d = "50"; d=a+d; //ответ: 65 а данный код выводит http://www.cyberforum.ru/cpp-beginners/thread332127.html
C++ Вычисление корней многочлена
нужно написать программу которая вычисляет корни многочлена. Степень многочлена мы задаём.
C++ повторное вполнение действия
Мне стал интересно как сделать чтобы например дисковод окрывался и закрывался каждые 30 секунд в течении 10 минут пожалуста выложите исходники с комментариями
C++ Socks5 Server http://www.cyberforum.ru/cpp-beginners/thread332043.html
Здраствуйте! Необходима для личных целей написать Socks5 Server с авторизацией. Помогите, с чего начать, што использовать, может какие библиотеки? Зарание спасибо =)
C++ Добавление собственной библиотеки Привет! Помогите пожалуйста суть такова. Я сделал библиотеку, как опишу ниже. Суть вопроса, объясните пожалуйста по шагам как ее добавлять к новым проектам, переписывать руками, типа вставлять хедер и *.cpp файлы не вариант, хотя если иного нет, то подскажите. Она лежит у меня сохраненная в папке, есть ли возможность сделать так чтобы, когда я пишу код сделать #include "MyLibrary.h@ и все.... подробнее

Показать сообщение отдельно
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
12.07.2011, 12:44  [ТС]     Как заполнить вектор в структуре?
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <ctime>
#include <iomanip>
using namespace std;
 
struct Questions
{ 
    string question;    // вопрос
    string answer[5];   // варианты ответов
    char right;         // номер эталонного ответа
};
 
//Настройка (выводим и переписываем содержимое файла настройки test.ini)
void options ()
{
    //выводим содержимое test.ini
    string a;
    ifstream test("test.ini");
    if (test.is_open())
    {
        getline (test, a);
        cout<<"Текущее количество вопросов для теста равно "<<a<<endl;
    }
    else
        cout<<"Файл test.ini не был открыт на чтение"<<endl;
    test.close();
    //заполняем файл test.ini
    ofstream test2("test.ini");
    int t;
    if (test2.is_open())
    {
        do
        {
        cout<<"Введите количество вопросов "; cin>>t;
        if (t<10)
            cout<<"Количество вопросов не может быть меньше 10"<<endl;
        }
        while (t<10);
        test2<<t;
    }
    else
        cout<<"Файл test.ini не был открыт на запись"<<endl;
    test2.close();
}
 
//Функции кодирования-декодирования
char Code(char ch) { ch ^= 0x57; return ch; }
char Decode(char ch) { ch ^= 0x57; return ch; }
 
//посимвольно кодирует строку и добавляет ее в поток
void zapis (ofstream &potok, const string &s)
{
     for (unsigned int i = 0; i < s.length(); ++i) 
         potok.put(Code(s[i])); 
}
 
//функция ввода вопросов
void create ()
{
    string question, otvet, otvet_etalon;
    int key, etalon;
    ofstream potok("question.bin", ios_base::app);//открывается на дозапись
    if (potok.is_open())
    {
        do
        {
            //ввод вопроса
            cout<<"Введите вопрос ";
            cin.get();//в буфере клавиатуры остаётся неизвлечённым разделитель (символ перевода строки). Извлекаем с помощью cin.get();
            getline (cin, question);
            zapis (potok, question);
            zapis (potok, "@");
            cout<<"Введите 5 вариантов ответа"<<endl;
            for (int i=1; i<=5; i++)
            {
                cout<<"Введите "<<i<<" вариант ответа "; getline (cin, otvet);
                zapis (potok, otvet); zapis (potok, "@");
            }
            do
            {
                cout<<"Введите номер правильного ответа "; cin>>etalon;
                if (etalon<1 || etalon>5)
                    cout<<"Вы ввели некорректный номер"<<endl;
            }
            while (etalon<1 || etalon>5);
            //перевод числа в строку
            switch (etalon)
            {
                case 1: otvet_etalon="1"; break;
                case 2: otvet_etalon="2"; break;
                case 3: otvet_etalon="3"; break;
                case 4: otvet_etalon="4"; break;
                case 5: otvet_etalon="5"; break;
            }
            zapis (potok, otvet_etalon); zapis (potok, "@");
            system("cls");
            //запрос на ввод еще одного вопроса в виде менюшки
            cout<<"\n\n\n\n\n\n\n";
            cout<<"\t\t\tМЕНЮ"<<endl<<endl;
            cout<<"\t\t\t0.Назад в главное меню"<<endl;
            cout<<"\t\t\t1.Ввести еще один вопрос"<<endl;
            //Защита от дурака
            do
            {
                cout<<"\t\t\tВведите пункт меню "; cin>>key;
                if (key<0 || key>1)
                    cout<<"\t\t\tВы ввели неправильный пункт меню"<<endl;
            }
            while (key<0 || key>1);
        }
        while (key);
        potok.close();
    }
    else
        cout<<"Файл question.bin не был открыт на запись"<<endl;
}
 
void read_questions (vector <Questions> &Q)
{
    string question, answer;
    Questions vopros;
    char simvol, etalon;
    int i;
    const bool key=true;//для вечного цикла, выход по окончании чтения файла
    ifstream potok("question.bin");
    if (potok.is_open())
    {
        while(key)
        {
            //читаем вопрос
            while (!potok.eof())
            {
                simvol=potok.get();
                simvol=Decode (simvol);
                if (simvol=='@')
                    break;
                question+=simvol;
            }
            if (potok.eof()) //защита на случай, если файл закончился, не встретив знак окончания вопроса ('@')
            {potok.close(); return;}
            vopros.question=question;
            question.clear();
            //читаем ответы
            i=0;
            while (i<5)
            {
                while (!potok.eof())
                {
                    simvol=potok.get();
                    simvol=Decode (simvol);
                    if (simvol=='@')
                        break;
                    answer+=simvol;
                }
                vopros.answer[i]=answer;//пробовал заменить на веткор в структуре а в этой строке написать vopros.answer.push_back(answer)-ошибка:выражение должно иметь тип класса
                answer.clear();
                i++;
            }
            //читаем номер правильного ответа
            etalon=potok.get();
            etalon=Decode(etalon);
            vopros.right=etalon;
            simvol=potok.get();//читаем последний символ вопроса, чтобы можно было читать следующий вопрос
            Q.push_back(vopros);
        }
    }
    else
        cout<<"Файл question.bin не был открыт на чтение"<<endl;
}
 
void expiriment ()
{
    Questions vopros;
    vopros.question="qwerty";
    vopros.answer[0]="qwerty";
 
}
 
void prosmotr ()
{
    vector <Questions> Q;
    //Читаем файл question.bin, создаем вектор структур
    read_questions(Q);
    //Выводим вектор структур на экран
 
    expiriment();//к проге не имеет отношения, просто экспериментировал
}
 
int main ()
{
    setlocale(LC_ALL, "Russian");
    int menu;
    const bool key=true;    //для выхода из программы нужно будет выбрать в меню выход
    do                      //после завершения любой функции программа выводит главное меню
    {
        //ВЫВОД МЕНЮ
        cout<<"\n\n\n\n\n\n\n";
        cout<<"\t\t\tГЛАВНОЕ МЕНЮ"<<endl<<endl;
        cout<<"\t\t\t0.Выход"<<endl;
        cout<<"\t\t\t1.Тестирование"<<endl;
        cout<<"\t\t\t2.Настройка"<<endl;
        cout<<"\t\t\t3.Ввод вопросов"<<endl;
        cout<<"\t\t\t4.Просмотр вопросов"<<endl<<endl;
        //ЗАЩИТА ОТ ДУРАКА (в switch нет необходимости употреблять default)
        do
        {
            cout<<"\t\t\tВведите пункт меню "; cin>>menu;
            if (menu<0 || menu>4)
                cout<<"\t\t\tВы ввели неправильный пункт меню"<<endl;
        }
        while (menu<0 || menu>4);
        //Переход к функциям в зависимости от выбора пункта меню
        switch (menu)
        {
            case 0: return 0;                               //выход
            case 2: options(); system("cls"); break;        //Настройка
            case 3: create(); system("cls"); break;         //Ввод вопросов
            case 4: prosmotr(); system("cls"); break;       //Просмотр вопросов
        }
    }
    while (key);
}
поставьте red point (не знаю как правильно называется, вообщем останавливает систему и показывает значения локальных переменных) на 159 строке, запустите, выберите в меню 3, введите вопрос и варианты ответов длиной больше одного (чтобы увидеть эту проблему с массивом) на английском (русские выдает кракозябрамми почему-то, еще одна моя проблемка) затем выберите 4 и когда система остановиться посмотрите на vopros->answer, там все увидите
 
Текущее время: 02:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru