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

Некоректно работает метод записи информации в обьект - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ C++ Сортировка массива методом Min и Max | Не работает программа http://www.cyberforum.ru/cpp-beginners/thread975115.html
Читала темы на форумах про сортировки и вроде бы пришла к нормальному коду, но при выводе отсортированного массива на экран он выводит слова. Не могли бы вы помочь мне с этой проблемой? #include <iostream> #include <conio.h> #include <time.h> using namespace std; void main () { setlocale(LC_ALL, "Russian");
C++ Пример структуры для изучения Пожалуйста,приведите пример структуры для разбора,сначала пробовал смотреть чужие темы на эту тему на форуме,но там у всех со своими ошибками,что побудило создать свою тему чем запоминать чужие ошибки. Например что должно быть в структуре: 1, Описать структуру с именем Dota2, содержащую следующие поля: - Имя героя; - Основная характеристика; - Его роль. 2. Следующие действия: - ввод с... http://www.cyberforum.ru/cpp-beginners/thread975095.html
Вычисление занчения C++
Доброго времени суток, помогите вычислить
Вычисление числа P c заданной точностью e>0 C++
Доброго времени суток, помогите сделать задания.
C++ Выделение из исходной строки символов заданной длины с указанного номера позиции http://www.cyberforum.ru/cpp-beginners/thread975049.html
помогите, а то я в ассемблере слаб. нужно написать через сегменты. tasm dseg segment public para 'data' str1 db "123456" l equ $-str1 a db ? s db "$" mes db 10,13,"Vvedite nomer pozicii $" vel db 10,13,"vvedite coli4ectvo cimvolov $" str3 db ? l2 equ $-str2
C++ Напишите программу формирования массива С, компоненты которого определяются по формулам Заданы два массива A и B одинаковой размерности. Напишите программу формирования массива С, компоненты которого определяются по формулам: (4a, если a>b) c= (4b, если b<=a) подробнее

Показать сообщение отдельно
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
11.10.2013, 23:12     Некоректно работает метод записи информации в обьект
Есть класс с полями, одно из них - name типа string. если имя вводить через cin то все нормально, но я хочу вводить ее через getline чтоб можно было вводить с пробелами. Для первого обьекта все работает хорошо, для следущих строчка ввода имени(86) пропускаеться. точнее все пропускаеться от ввода последнего поля первого елемента и до ввода даты следущего елемента.
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
#include <iostream>
#include <set>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
const int current_уear = 2013;
const int arr_size = 3;
class Date
{
    int dd;
    int mm;
    int yy;
public:
    Date::Date()
    {
        dd = 0;
        mm = 0;
        yy = 0;
    }
    Date::Date(int _dd, int _mm, int _yy)
    {
        dd = _dd;
        mm = _mm;
        yy = _mm;
    }
    void setDate()
    {
        int _dd, _mm, _yy;
        bool B=true;
        while(B)
        {
            cout << "\nEnter new date: ";
            cin >> _dd  >> _mm >> _yy;
            if(_dd > 31 || _mm > 12 || _yy < current_уear-5 || _yy > current_уear+1)
            {
                cout <<  "\nInvalid date. Try again.";
                system("pause");
                system("cls");
                continue;
            }
            if(_mm == 4 || _mm == 6 || _mm == 9 || _mm == 11 && _dd>30)
            {
                cout << "\nInvalid date. Entered month haven`t more 30 days.";
                system("pause");
                system("cls");
                continue;
            }
            if(_mm == 2 && _dd>29)
            {
                cout << "\nInvalid date. Entered month haven`t more 29  days.";
                system("pause");
                system("cls");
                continue;
            }
            else 
            {
                dd = _dd; mm = _mm; yy = _yy;
                B = false;
            }
        }
    }
    void show_date()
    {
        cout << "Date: " << dd << '.' << mm << '.' << yy;
    }
};
 
class Good
{
    string name;
    Date date;
    double price;
    int count;
    int number;
public:
    Good::Good()
    {
    }
    void input()
    {
        cout << "\nEnter name: ";
        getline (cin, name); // - работает только для первого обьекта, для остальных етот метод пропускаеться
        //cin >> name; // - работает нормально для всех обьектов
        system("cls");
        date.setDate();
        system("cls");
        cout << "\nEnter price: ";
        cin >> price;
        system("cls");
        cout << "\nEnter count: ";
        cin >> count;
        system("cls");
        cout << "\nEnter number: ";
        cin >> number; // - если юзать Getline то после етой строчки все пропускаеться до строчки (89). (99 не выведет)
        cout << "\nok\n";
        system("cls");
    }
    void output()
    {
        cout << "\nName: " << name << endl;
        date.show_date();
        cout << "\nPrice: " << price;
        cout << "\nCount: " << count;
        cout << "\nCost: " << calculate_cost();
        cout << "\nNumber: " << number;
        system("pause");
        system("cls");  
    }
    void set_price()
    {
        cout << "\nEnter new price: ";
        cin >> price;
        system("cls");
    }
    void change_count()
    {
        cout <<"\nAdd or subtract?";
        string choise;
        bool B = true;
        while(B)
        {
            cin >> choise;
            if(choise != "add" || choise != "subtract")
                cout << "\nInvalid choise. Try again(add of subtract).";
            else B = false;
            system("cls");
        }
        cout << "\nEnter value:";
        int value;
        cin >> value;
        if (choise == "add")
            count =+value;
        if (choise == "subtract")
            count=-value;
        cout << "\nNew count: " << count;
        system("cls");
    }
    double calculate_cost()
    {
        return count*price;
    }
    void toString()
    {
        cout << "\nCost = " << calculate_cost();
 
    }
};
 
void main()
{
    /*Good arr1;
    arr1.input();
    arr1.output();
    Good arr2;
    arr2.input();
    arr2.output();
    Good arr3;
    arr3.input();
    arr3.output();*/
    Good arr[arr_size];
    for (int i=0;i<arr_size; i++)
    {
        arr[i].input();
        cout << "\nok\n"; // - тоже не выводиться, если вводить имя через getline(86 cтрока). сразу начинает вводиться поле - дата для следущего елемента
    }
    for (int i=0;i<arr_size; i++)
    {
        arr[i].output();
    }
    system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru