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

Не работает gets (программа игнорирует операцию ввода) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.83
GarrisonD
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 22
09.10.2012, 13:53     Не работает gets (программа игнорирует операцию ввода) #1
Помогите. Не работает оператор gets в моей программе! Что делать? Как изменить? Все идет нормально, никаких ошибок. Но когда доходит дело до ввода, то вводить программа не дает, операцию ввода она как-бы пропускает:
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
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
using namespace std;
 
#include "Header file.h"
 
void main ()
{
    char pointer_line [ 50 ];
    int key;
 
    setlocale ( LC_ALL, "RUS" );
 
    cin >> key;
    switch ( key )
    {
    case 1 :
        {
            cout << "\n Поиск по:\n";
            cout << "   1. Названию фильма\n";
            cout << "   2. Режисеру фильма\n\n";
            cout << " Ваш выбор: "; cin >> key;
 
            switch ( key )
            {
            case 1 :
                {
                    cout << " Введите название фильма: ";
                    gets ( pointer_line );
                }
                break;
            case 2 :
                {
                    cout << " Введите режисера: ";
                    gets ( pointer_line );
                }
                break;
            default :
                {
                    cout << " Такого варианта выбора нет!";
                }
            }
        }
        break;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 13:53     Не работает gets (программа игнорирует операцию ввода)
Посмотрите здесь:

программа игнорирует break C++
Программа игнорирует пробел. C++
Программа игнорирует gets() C++
C++ программа выпустила недопустимую операцию и будет закрыта (+++)
Программа игнорирует условия C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
СашаН
 Аватар для СашаН
268 / 268 / 86
Регистрация: 15.03.2012
Сообщений: 596
Записей в блоге: 1
09.10.2012, 14:18     Не работает gets (программа игнорирует операцию ввода) #2
Попробуй stdio.h заинклудить.
C
1
#include <stdoi.h>
GarrisonD
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 22
09.10.2012, 14:37  [ТС]     Не работает gets (программа игнорирует операцию ввода) #3
Пробовал. Ничего не изменилось...
СашаН
 Аватар для СашаН
268 / 268 / 86
Регистрация: 15.03.2012
Сообщений: 596
Записей в блоге: 1
09.10.2012, 14:54     Не работает gets (программа игнорирует операцию ввода) #4
А ты правильно написал? А то я не правильно.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.10.2012, 15:00     Не работает gets (программа игнорирует операцию ввода) #5
GarrisonD, после
Цитата Сообщение от GarrisonD Посмотреть сообщение
cin >> key;
в потоке ввода остаётся символ перевода строки, который gets() ваша и ловит в качестве ввода. И кстати, кто Вас надоумил совмещать операции ввода/вывода из С++ с вводом в стиле С, да ещё и с функцией, которую во всех руководствах настоятельно рекомендуют не использовать и держат исключительно для обратной совместимости?
SECURITY CONSIDERATIONS
The gets() function cannot be used securely. Because of its lack of
bounds checking, and the inability for the calling program to reliably
determine the length of the next incoming line, the use of this function
enables malicious users to arbitrarily change a running program's func-
tionality through a buffer overflow attack. It is strongly suggested
that the fgets() function be used in all cases. (See the FSA.)
man gets
GarrisonD
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 22
09.10.2012, 15:02  [ТС]     Не работает gets (программа игнорирует операцию ввода) #6
А как мне тогда сделать так чтобы ввод в pointer_line происходил вместе с записью пробелов и табуляцией?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2012, 15:08     Не работает gets (программа игнорирует операцию ввода)
Еще ссылки по теме:

Не работает программа проверки ввода цифр C++
C++ Циклическая программа (при нажатии клавиши повторяет операцию, изменяя данные)
Реализовать операцию вставки нового элемента в отсортированный список и операцию извлечения из списка данных C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.10.2012, 15:08     Не работает gets (программа игнорирует операцию ввода) #7
Цитата Сообщение от GarrisonD Посмотреть сообщение
А как мне тогда сделать так чтобы ввод в pointer_line происходил вместе с записью пробелов и табуляцией?
http://www.cplusplus.com/reference/i...tream/getline/
Но поток ввода всё равно сначала очистить нужно
http://www.cplusplus.com/reference/i...stream/ignore/
Yandex
Объявления
09.10.2012, 15:08     Не работает gets (программа игнорирует операцию ввода)
Ответ Создать тему
Опции темы

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