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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.83
GarrisonD
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 22
#1

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

09.10.2012, 13:53. Просмотров 4130. Ответов 6
Метки нет (Все метки)

Помогите. Не работает оператор 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;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
СашаН
 Аватар для СашаН
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
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
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++
Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает C++
Почему-то программа игнорирует условие if/else C++
Программа ввода и ввывода C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
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 (программа игнорирует операцию ввода)
Ответ Создать тему
Опции темы

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