Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
#1

Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего - C++

24.07.2014, 02:08. Просмотров 796. Ответов 11
Метки нет (Все метки)

Создайте класс employee, который содержит имя (объект класса string) и но-
мер (типа long) служащего. Включите в него метод getdata(), предназна-
ченный для получения данных от пользователя и помещения их в объект,
и метод putdata(), для вывода данных. Предполагаем, что имя не может иметь
внутренних пробелов.
Напишите функцию main(), использующую этот класс. Вам нужно будет
создать массив типа employee, а затем предложить пользователю ввести
данные до 100 служащих. Наконец, вам нужно будет вывести данные всех
служащих.

программа работает только на первом цикле, далее ввод имени сотрудника пролетается и сразу запрашивается номер. в чем дело? мне нужно, чтобы имя работника вводилось с пробелами, потому использовала функцию getline, именно с ней не работает, а с обычным cin>> работает. я уже замучилась искать ошибку



C++ (Qt)
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
#include "stdafx.h"
#include <iostream>     
#include <string>
using namespace std;
 
class Employee 
{
private:
    string name;
    long number;
public:
    void getdata()
    {
        cout << "\nEnter name: "; getline (cin, name);
        cout << "\nEnter number: "; cin >> number;
    }
    void putdata()const
    {
        cout << "\nname: " << name << ", number: " << number;
    }
};
    
int main()
{
    Employee empl [100];
    char ans;
    int n=0;
    do
    {
        cout << "Enter employee ";
        empl [n++].getdata();
        cout << "continue typing? (y/n): "; cin >> ans;
    }
    while ( ans != 'n' );
 
    for (int j = 0; j<n; j++)
    {
        cout << "\nEmployee " << j+1 << " : ";
        empl [j].putdata();
    }
    cout << endl;
 
    system ("pause");
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2014, 02:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего (C++):

Создайте класс с именем Employee, включающий в качестве элементов данных три информационных пункта: имя, фамилию и месячную зарплату - C++
Дело обстоит так: Прочитав и, как я думал, поняв 3ю главу книги &quot;Как программировать на с++&quot; Дейтелов пришло время задачек. Немного...

Создайте класс, который содержит информацию об имени и адресе - C++
Создайте класс, который содержит информацию об имени и адресе. Храните всю эту информацию в символьных строках закрытой части класса....

Создайте определенный пользователем класс Point, который содержит скрытые компоненты-данные xCoord и yCoord - C++
1. Создайте определенный пользователем класс Point, который содержит скрытые компоненты-данные xCoord и yCoord и объявляет перегруженные...

Создайте класс employee. Как написать программу? - C++
Создайте класс employee. Класс должен включать поле (массив) типа char для хранения фамилии сотрудника, 2 поля типа string для хранения...

Создайте класс со специальной версией оператора new, получающей второй аргумент типа string - C++
Создайте класс со специальной версией оператора new, получающей второй аргумент типа string. Этот класс должен содержать переменную static...

Как создать класс, который содержит элементы другого класса - C++
Добрый день, я чисто любитель, начала сама потихоньку разбираться в с++, благополучно дошла до классов и сделала класс konto (банковский...

11
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,592
24.07.2014, 02:16 #2
cin.ignore() после getline. В потоке остаётся символ переноса строки (\n).
0
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
24.07.2014, 02:32  [ТС] #3
Цитата Сообщение от MrGluck Посмотреть сообщение
cin.ignore() после getline. В потоке остаётся символ переноса строки (\n).
если пишу так:


C++ (Qt)
1
cout << "\nEnter name: "; getline (cin, name); cin.ignore();
на втором цикле тоже вылетает, но уже по другому

Добавлено через 8 минут
а самое интересное, что в решении этой задачи в конце книги используется cin >> ! но в условии ясно сказано, что должны учитываться пробелы
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2014, 02:46 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от MrGluck Посмотреть сообщение
cin.ignore() после getline
Перед getline(), после cin >>. Или так:
C++
1
2
3
4
5
...
(cin >> ans).get();
...
(cin >> number).get();
...
1
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,592
24.07.2014, 02:50 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
struct Employee
{
    std::string surname;
    int date;
};
 
int main()
{
    Employee e;
    for (int i=0; i < 2; i++)
    {
        std::getline(std::cin, e.surname);
        std::cin >> e.date;
                std::cin.ignore();
        std::cout << e.surname << " " << e.date << std::endl;
    }
}
http://ideone.com/CNCVnP

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Перед getline(), после cin >>
Согласен, думал об одном - написал совершенно другое.

0
alsav22
24.07.2014, 02:52
  #6

Не по теме:

Бывает.

0
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
24.07.2014, 02:57  [ТС] #7
alsav22, этим способом при выводе отображается только последнее слово

Добавлено через 4 минуты
вот так работает, наконец, правильно
спасибо вам. а не могли бы вы разъяснить поподробнее про cin.ignore и почему до getline?


C++ (Qt)
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
#include "stdafx.h"
#include <iostream>     
#include <string>
using namespace std;
 
class Employee 
{
private:
    string name;
    long number;
public:
    void getdata()
    {
        cout << "\nEnter name: "; cin.ignore(); getline (cin, name);
        cout << "\nEnter number: "; cin >> number;
    }
    void putdata()const
    {
        cout << "\nname: " << name << ", number: " << number;
    }
};
    
int main()
{
    Employee empl [100];
    char ans;
    int n=0;
    do
    {
        cout << "Enter employee ";
        empl [n++].getdata();
        cout << "continue typing? (y/n): "; cin >> ans;
    }
    while ( ans != 'n' );
 
    for (int j = 0; j<n; j++)
    {
        cout << "\nEmployee " << j+1 << " : ";
        empl [j].putdata();
    }
    cout << endl;
 
    system ("pause");
    return 0;
}
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2014, 02:57 #8
Цитата Сообщение от Pari Посмотреть сообщение
этим способом при выводе отображается только последнее слово
Вот так сделали?
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
#include "stdafx.h"
#include <iostream>     
#include <string>
using namespace std;
 
class Employee 
{
private:
    string name;
    long number;
public:
    void getdata()
    {
        cout << "\nEnter name: "; getline (cin, name);
        cout << "\nEnter number: "; (cin >> number).get();
    }
    void putdata()const
    {
        cout << "\nname: " << name << ", number: " << number;
    }
};
    
int main()
{
    Employee empl [100];
    char ans;
    int n=0;
    do
    {
        cout << "Enter employee ";
        empl [n++].getdata();
        cout << "continue typing? (y/n): "; (cin >> ans).get();
    }
    while ( ans != 'n' );
 
    for (int j = 0; j<n; j++)
    {
        cout << "\nEmployee " << j+1 << " : ";
        empl [j].putdata();
    }
    cout << endl;
 
    system ("pause");
    return 0;
}
0
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
24.07.2014, 03:03  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот так сделали?
чуть по другому, смотрите выше.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2014, 03:03 #10
....
0
Миниатюры
Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего  
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2014, 03:05 #11
Цитата Сообщение от Pari Посмотреть сообщение
чуть по другому, смотрите выше.
Я про свои рекомендации спросил (в 4 посте). Что-то не так сделали, раз:
Цитата Сообщение от Pari Посмотреть сообщение
этим способом при выводе отображается только последнее слово
У меня всё нормально отображается (скрин).
0
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
24.07.2014, 03:13  [ТС] #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Я про свои рекомендации спросил (в 4 посте). Что-то не так сделали, раз:
а, я поняла, да, не так написала. еще плохо ориентируюсь в функциях, очень плохо(
0
24.07.2014, 03:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2014, 03:13
Привет! Вот еще темы с ответами:

Реализовать класс Time, который содержит три поля типа int - C++
Всем привет. Помогите пожалуйста с условием:Сам класс и вывод времени есть. Как Перегрузить операцииввода–выводав поток, которые работают с...

Создать класс. Символьное поле должно быть задано как объект класса string - C++
решите задачку!) 6. Создать класс. Символьное поле должно быть задано как объект класса string. Написать конструктор по умолчанию,...

От класса String наследовать новый класс, который имеет проверку на превышение размера строки - C++
Доброго времени суток! Решаю задачи из учебника Роберта Лафоре ООП в C++. До этой задачи все решал сам и успешно, а тут встал в...

Создать класс EMPLOYEE, производный от класса PERSON и использовать их для вычисления зарплаты сотрудника - C++
Базовый класс: ЧЕЛОВЕК (PERSON) Имя (name) – string Возраст (age) – int Создать производный класс EMPLOYEE, имеющий поля: ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru