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

Функция getline - C++

Восстановить пароль Регистрация
 
5ere2hik
0 / 0 / 0
Регистрация: 05.09.2013
Сообщений: 3
05.09.2013, 17:42     Функция getline #1
Делаю упражнение по С++ (консольное приложение). Необходимо считать строку, включая пробелы. Вот описание класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class employee
{
private:
    string name;
    long numb;
 
public:
    employee()
    {}
 
    employee(string s, long n ): name(s), numb(n)
    {}
 
    void getdata()
    {
        cout << "Enter number: ";
        cin >> numb;
        cout << "Enter name: ";
        getline(cin, name);
    }
 
};
В мэйне несколько раз вызываю метод getdata():
C++
1
2
3
4
5
6
7
8
int main()
{
    employee base[100];
 
    base[0].getdata();
    base[1].getdata();
    base[2].getdata(); 
}
Результат выполнения такой:
Код
Enter number: 12345
Enter name: Enter number:
Почему пропускается ввод имени? что я делаю не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2013, 17:42     Функция getline
Посмотрите здесь:

Функция С++ getline() C++
функция getline() в dev_C++ C++
C++ Функция getline в условии while
C++ Не работает функция getline !
Не выполняется функция getline() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
05.09.2013, 17:48     Функция getline #2
Цитата Сообщение от 5ere2hik Посмотреть сообщение
Почему пропускается ввод имени?
Потому что в потоке остался символ после ввода числа
5ere2hik
0 / 0 / 0
Регистрация: 05.09.2013
Сообщений: 3
05.09.2013, 17:50  [ТС]     Функция getline #3
Цитата Сообщение от Croessmah Посмотреть сообщение
в потоке остался символ после ввода числа
Этого как-то можно избежать?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
05.09.2013, 17:54     Функция getline #4
крайне ненадежная штука:
C++
1
(cin >> numb).get();
5ere2hik
0 / 0 / 0
Регистрация: 05.09.2013
Сообщений: 3
05.09.2013, 17:59  [ТС]     Функция getline #5
Работает, спасибо!

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
крайне ненадежная штука
А почему ненадежная?

rublag
52 / 52 / 4
Регистрация: 06.02.2013
Сообщений: 156
06.09.2013, 09:30     Функция getline #6
Цитата Сообщение от 5ere2hik Посмотреть сообщение
Работает, спасибо!

Не по теме:

А почему ненадежная?

Потому, что если пользователь введёт больше одного дополнительного символа, то будет то же самое
Код
Enter number: 1 
Enter name: Enter number:
здесь я ввёл "1 \n"; .get() взял один символ(пробел) из stdin, а перенос строки("\n") остался.
Yandex
Объявления
06.09.2013, 09:30     Функция getline
Ответ Создать тему
Опции темы

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