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

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

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

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

09.10.2012, 13:53. Просмотров 4977. Ответов 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;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 13:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает gets (программа игнорирует операцию ввода) (C++):

Не работает программа проверки ввода цифр - C++
Программа упорядочивает массив по убыванию. Надо было сообразить защиту от ввода НЕ цифр, кроме символа (-), вроде правильно, но не...

Программа игнорирует gets() - C++
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;string&gt; #include &lt;iostream&gt; using namespace std; struct NOTE { char...

Программа игнорирует условия - C++
Всем привет. Проблема. При выполнение данной программы выводит результат 4-х операций. Почему if не работает? Я имею ввиду, если...

программа игнорирует break - C++
скажите кто нибудь почему программа игнорирует break'и? #include &lt;iostream.h&gt; int menu(); int main() { int choice=menu(); ...

Программа игнорирует пробел. - C++
Мне нужно написать такую программу: Заменить всюду в файле один заданный набор символов на другой(с учётом разницы в их длине). ...

Почему-то программа игнорирует условие if/else - C++
Дана задача: Даны два массива: А и B (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
СашаН
268 / 268 / 86
Регистрация: 15.03.2012
Сообщений: 596
Записей в блоге: 1
09.10.2012, 14:18 #2
Попробуй stdio.h заинклудить.
C
1
#include <stdoi.h>
GarrisonD
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 22
09.10.2012, 14:37  [ТС] #3
Пробовал. Ничего не изменилось...
СашаН
268 / 268 / 86
Регистрация: 15.03.2012
Сообщений: 596
Записей в блоге: 1
09.10.2012, 14:54 #4
А ты правильно написал? А то я не правильно.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
09.10.2012, 15:00 #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  [ТС] #6
А как мне тогда сделать так чтобы ввод в pointer_line происходил вместе с записью пробелов и табуляцией?
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
09.10.2012, 15:08 #7
Цитата Сообщение от GarrisonD Посмотреть сообщение
А как мне тогда сделать так чтобы ввод в pointer_line происходил вместе с записью пробелов и табуляцией?
http://www.cplusplus.com/reference/i...tream/getline/
Но поток ввода всё равно сначала очистить нужно
http://www.cplusplus.com/reference/i...stream/ignore/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2012, 15:08
Привет! Вот еще темы с ответами:

Программа выполнила недопустимую операцию и будет закрыта - C++
Это я всё о том контроле... Значит принимаю я массив вариантов следующим образом: void CTableCtrl::getData(const VARIANT FAR&amp; myData) ...

Реализовать операцию вставки нового элемента в отсортированный список и операцию извлечения из списка данных - C++
реализовать операцию вставки нового элемента в отсортированный список и операцию извлечения из списка данных о 3-х студентов с самым низким...

Циклическая программа (при нажатии клавиши повторяет операцию, изменяя данные) - C++
Нужно написать программу, чтобы при каждом повторном нажатии определённой клавиши, программа выполняла какую-либо операцию с изменяющимися...

Не работает программа ввода матрицы из файла - Turbo Pascal
Как сделать так чтобы эта программа работала на турбо паскале? на abc работает. Не могу понять ошибки. const nmax=10; m=3; var...


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

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

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