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

Почему пропускается getline? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.80
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
09.07.2011, 15:56     Почему пропускается 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
23
24
25
26
27
28
29
30
31
32
33
34
//функция ввода вопросов
void create ()
{
    string question;
    int key;
    ofstream potok("question.bin", ios_base::app);//открывается на дозапись
    if (potok.is_open())
    {
        do
        {
            //ввод вопроса
            cout<<"Введите вопрос ";
            getline (cin, question);
            zapis (potok, question);
        
            //запрос на ввод еще одного вопроса в виде менюшки
            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);
    }
    else
        cout<<"Файл question.bin не был открыт на запись"<<endl;
}
Почемуто пропускает getline в чем причина?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
09.07.2011, 15:59     Почему пропускается getline? #2
попробуйте cin.clear() перед getline-ом
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
09.07.2011, 16:01     Почему пропускается getline? #3
потому, что после
C++
1
cin>>key;
(или после аналогичного в другой части программы) в буфере клавиатуры остаётся неизвлечённым разделитель (символ перевода строки). Надо его как-нибудь оттуда устранить. Например
C++
1
cin.get();
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
09.07.2011, 16:15     Почему пропускается getline? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
#include <limits>
...
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Добавлено через 5 минут
How do I flush the input stream?
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
10.07.2011, 10:56  [ТС]     Почему пропускается getline? #5
cin.clear() не помог, cin.get() помогло, третий вариант не стал пробовать, ВСЕМ СПАСИБО

Добавлено через 50 минут
Возник еще один вопрос по функции, приведенной выше: после getline у меня функция zapis(potok,question) которая посимвольно заносит строку в поток (каждый символ перед этим кодируется). Дальше я буду использовать getline для ввода вариантов ответа и номера правильного ответа. Так вот, надо ли все это разделять каким нибудь символом или же после выполнения getline в конец заносится символ перехода на новую строку?
Yandex
Объявления
10.07.2011, 10:56     Почему пропускается getline?
Ответ Создать тему
Опции темы

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