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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.80
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
#1

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

09.07.2011, 15:56. Просмотров 3137. Ответов 4
Метки нет (Все метки)

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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2011, 15:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему пропускается getline? (C++):

Пропускается строчка getline - C++
В коде есть такой фрагмент, но при его выполнении программа пропускает выполнение первого ожидания ввода строки и сразу переходит ко второй...

Пропускается cin.getline - C++
Здравствуйте. Функция поиска void search() { char str; int arr_1, arr_2,col_rezult = 0; int on_name = 0; int on_autor =...

Почему то пропускается условие - C++
В программе нужно указать записывать в файл или нет. Вроде бы все правильно, но почему то пропускается условие вот сдесьif(fl == 'y' || fl...

После 1-го цикла пропускается ввод adres, почему так происходит? - C++
#include&lt;iostream&gt; #include &lt;cstring&gt; using namespace std; struct anketa{ char fio; char adres; double year; ...

Почему не срабатывает getline() ? - C++
Все привет почему то не срабатывает первый getline string comp_; cout &lt;&lt; &quot;1. Название: &quot; &lt;&lt; endl; getline(cin, comp_); cout...

Почему getline не работает? - C++
Вот код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;locale&gt; #include &lt;string&gt; #include &lt;sstream&gt; #include &lt;math.h&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
09.07.2011, 15:59 #2
попробуйте cin.clear() перед getline-ом
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
09.07.2011, 16:01 #3
потому, что после
C++
1
cin>>key;
(или после аналогичного в другой части программы) в буфере клавиатуры остаётся неизвлечённым разделитель (символ перевода строки). Надо его как-нибудь оттуда устранить. Например
C++
1
cin.get();
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
09.07.2011, 16:15 #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  [ТС] #5
cin.clear() не помог, cin.get() помогло, третий вариант не стал пробовать, ВСЕМ СПАСИБО

Добавлено через 50 минут
Возник еще один вопрос по функции, приведенной выше: после getline у меня функция zapis(potok,question) которая посимвольно заносит строку в поток (каждый символ перед этим кодируется). Дальше я буду использовать getline для ввода вариантов ответа и номера правильного ответа. Так вот, надо ли все это разделять каким нибудь символом или же после выполнения getline в конец заносится символ перехода на новую строку?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2011, 10:56
Привет! Вот еще темы с ответами:

Почему не работает функция getline ()? - C++
Может что-то нужно дописывать? #include &lt;iostream&gt; using namespace std; int main() {

Почему stream.getline считывает до пробела? - C++
Задание: удалить все адреса изображений в html-файле (в теге img значение атрибута src заменить на пустое). void...

Ткните носом, почему не видит getline ? - C++
int sortirovka() { ofstream out(&quot;output.txt&quot;); list&lt;string&gt; lines; while(!feof(f)) { string s1; ...

Почему игнорируется cin.getline() в классе? - C++
Вот конструктор класса. При вызове конструктора создаётся односвязный список и данные вводятся с клавиатуры. Почему-то не работает функция...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.07.2011, 10:56
Ответ Создать тему
Опции темы

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