Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
G6
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 30
1

Цикл и строки, очистка потока ввода

16.09.2014, 20:33. Просмотров 952. Ответов 5
Метки нет (Все метки)

Возникла проблема. При вводе "Y" цикл переходит сразу к следующему вооду, то есть пропускает "cin.getline". Как исправить?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <iostream>
#include <conio.h>
#include <fstream>
#include <clocale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char kalendar[101];
    char end = 'Y';
    
    while ( end == 'Y' )
    {
        cout<<"Начальное время"<<"  -   "<<"Конечное время"<<"  -   "<<"Название задачи"<<endl;
        cin.getline(kalendar,101);
        cin.clear();
        cout<<"Продолжить?(Y/N)"<<endl;
        cin>>end;
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2014, 20:33
Ответы с готовыми решениями:

Очистка потока ввода && строки
как вобще грамотно очистить поток после ввода множества всяких вещей с...

Очистка потока ввода
Собственно тема подымалась в интернете, но внятного объяснения я не получил....

Очистка потока ввода
ПОМОГИТЕ НАЙТИ ОШИБКУ Ребят написал малюсенький фрагмент кода, но уже есть...

Класс Person. Очистка потока ввода
Добрый вечер помогите найти ошибку в проге: задание : Разработайте класс...

Выполнение цикла. Очистка потока ввода
Добрый вечер. В данном коде тело цикла выполняется не n, а n-1 раз. Вернее,...

5
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2014, 20:49 2
Цитата Сообщение от G6 Посмотреть сообщение
При вводе "Y" цикл переходит сразу к следующему вооду
C++
1
(cin>>end).get();
1
coder2
1 / 1 / 0
Регистрация: 01.03.2014
Сообщений: 312
16.09.2014, 20:49 3
Функция служит для ввода массива из входного потока. Правильно, нет, но для цикла она в данный момент не подойдет, или же придеться создать переменную для временного хранения и вывода.
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2014, 20:51 4
Цитата Сообщение от G6 Посмотреть сообщение
При вводе "Y" цикл переходит сразу к следующему вооду
cin.clear() там не нужен. Это сброс флагов, при ошибке в потоке.
0
G6
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 30
16.09.2014, 20:53  [ТС] 5
Твой совет помог. Спасибо.
0
zss
Модератор
Эксперт С++
7250 / 6699 / 4240
Регистрация: 18.12.2011
Сообщений: 17,681
Завершенные тесты: 1
16.09.2014, 21:10 6
Похоже, эту ошибку пора выносить в отдельную тему.
Думаю для ТС надо объяснить причину.

После считывания числа по cin>>end; указатель потока cin стоит на первом символе после числа,
а это - конец строки (нажатая клавиша Enter).
Если его не прочитать, например как предложил alsav22, То следующее чтение строки
cin.getline(kalendar,101); воспримет этот Enter как очередную пустую строку.
0
16.09.2014, 21:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2014, 21:10

Телефонный справочник. Очистка потока ввода
Доброго времени суток!!! Нужно сделать подобие телефонного справочника! Вот...

Ввод данных в string, очистка потока ввода
Дана программа #include &quot;stdio.h&quot; #include &quot;stdlib.h&quot; #include &quot;string.h&quot;...

Очистка потока
Приветствую! Есть метод класса, принимающий имя сотрудника (объект класса...


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

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

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