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

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

Войти
Регистрация
Восстановить пароль
 
nuHrBuH
248 / 248 / 99
Регистрация: 04.03.2011
Сообщений: 590
#1

пролетает gets в теле switch - C++

22.01.2014, 12:54. Просмотров 370. Ответов 8
Метки нет (Все метки)

не хочет запрашивать ввод строки, как будто строки gets(s); нету
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
while (v != 1 && v != 2)
    {
        cin >> v;
        switch(v)
        {
            case 1:
            {
                gets(s);
                strcat(s, ".txt");  
                ifstream in(s);
                
                                             // действия
 
                in.close();
                break;
            }
            case 2:
            {
                // действия
                break;
            }
            default:
            {
                // что-нибудь
                break;
            }
        }
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
22.01.2014, 12:58     пролетает gets в теле switch #2
nuHrBuH, добавьте перед gets fflush(stdin);
nuHrBuH
248 / 248 / 99
Регистрация: 04.03.2011
Сообщений: 590
22.01.2014, 13:06  [ТС]     пролетает gets в теле switch #3
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
nuHrBuH, добавьте перед gets fflush(stdin);
Спасибо, помогло. Что оно значит и зачем его ставить?
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 13:06     пролетает gets в теле switch #4
Замените ввод V так)

C++
1
(cin >> v).get();
nuHrBuH
248 / 248 / 99
Регистрация: 04.03.2011
Сообщений: 590
22.01.2014, 13:10  [ТС]     пролетает gets в теле switch #5
Цитата Сообщение от _script_ Посмотреть сообщение
Замените ввод V так)

C++
1
(cin >> v).get();
Спасибо, тоже работает)
Только как?)
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 13:13     пролетает gets в теле switch #6
Все нормально) если заменить там ввод, то не будет пропускать)
тут вот объясняется Не выполняется функция getline()
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
22.01.2014, 13:14     пролетает gets в теле switch #7
nuHrBuH, nuHrBuH, fflush - очистка буфера. В данном случае буфера ввода. Т.к после ввода строк в буфере ввода остается лишний символ - символ перевода строки. Но лучше заменили бы gets на getline, это в стиле C++.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.01.2014, 16:18     пролетает gets в теле switch #8
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
nuHrBuH, добавьте перед gets fflush(stdin);
Использовать fflush() для потока чтения - не есть хорошо. http://www.cplusplus.com/reference/c...ush/?kw=fflush
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 17:20     пролетает gets в теле switch
Еще ссылки по теме:

C++ Int в CHAR или LPCSTR (в теле цикла)
C++ Ошибка в теле цикла, синтаксис
C++ Работа в теле конструктора
Пролетает cin, после того как goto возвращается в начало программы C++
Использование нескольких операторов в теле if C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт CЭксперт С++
6435 / 3633 / 452
Регистрация: 29.11.2010
Сообщений: 9,602
22.01.2014, 17:20     пролетает gets в теле switch #9
В С++ такие проблемы решаются через
C++
1
std::cin.ignore()
Это игнорирует первый символ, переданный потоку - а это "\n", оставшийся с прошлого ввода и нажатия "Enter".
Yandex
Объявления
22.01.2014, 17:20     пролетает gets в теле switch
Ответ Создать тему
Опции темы

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