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

Не производиться ввод при помощи функции gets(s) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
30.10.2012, 20:00     Не производиться ввод при помощи функции gets(s) #1
По непонятной мне причине не производиться ввод при помощи функции gets(s) или getline(cin, s). Если использовать просто cin, то проблем нет:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//Рекурсия. Вычисление факториала. Функция, возвращающая
// наибольший общий делитель. Функция возращающая строку в обратном
// порядке.
 
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
 
// Функция вычисления факториала
int factorial( int val );
// Функция возвращает наибольший обший делитель
int rgcd( int v1, int v2 );
// Функция отображающая строку в обратном порядке
void reverse(char *s);
 
int main()
{
    // Применение функции вычисления факториала
    cout << "<Применение функции вычисления факториала>" << endl;
    cout << "Введите значение: ";
    int some_val;
    cin >> some_val;
    cout << factorial(some_val) << endl;
 
    // Применение функции возвращающей напибольший общий делитель
    cout << "<Применение функции возвращающей наибольший общий делитель>" << endl;
    cout << "Введите 2 значения: ";
    int dig1 = 0, dig2 = 0;
    cin >> dig1 >> dig2;
    cout << rgcd(dig1, dig2) << endl;
 
    cout << "<Применение функции отобращающе строку в обратном порядке>" << endl;
    cout << "Введите строку: ";
    char a[80];
    gets(a); // ВОТ НА ЭТОМ МЕСТЕ ПРОГРАММА ЗАВЕРШАЕТСЯ!
    reverse(a);
    return EXIT_SUCCESS;
}
 
// Функция отображающая строку в обратном порядке
void reverse(char *s)
{
    if (*s)
    reverse(s + 1);
    else
    return;
    cout << *s;
}
 
// Функция вычисления факториала
int factorial( int val )
{
    if ( val > 1 )
    return factorial(val - 1) * val;
    return 1;
}
 
// Функция возвращает наибольший обший делитель
int rgcd( int v1, int v2 )
{
    if ( v2 != 0 ) 
    return  rgcd(v2, v1 % v2);
    return v1;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
31.10.2012, 01:22  [ТС]     Не производиться ввод при помощи функции gets(s) #21
Нашёл в сети альтернативу cin.sync(): cin.ignore() - в моём случаи работает.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.10.2012, 01:26     Не производиться ввод при помощи функции gets(s) #22
Здесь можете ещё почитать. http://cppstudy.wordpress.com/2009/0...in-get-and-co/

Добавлено через 1 минуту
Цитата Сообщение от xtorne21st Посмотреть сообщение
Нашёл в сети альтернативу cin.sync(): cin.ignore() - в моём случаи работает.
Это не альтернатива, но работать будет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 01:33     Не производиться ввод при помощи функции gets(s)
Еще ссылки по теме:

Проверка при помощи вложенных блоков try C++
При помощи функции вывести на экран фигуру в виде буквы "Н". C++
C++ Обработка массивов при помощи процедур

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11837 / 6816 / 771
Регистрация: 27.09.2012
Сообщений: 16,908
Записей в блоге: 2
Завершенные тесты: 1
31.10.2012, 01:33     Не производиться ввод при помощи функции gets(s) #23
Цитата Сообщение от xtorne21st Посмотреть сообщение
Есть ли функция подобная cin.sync() и если нет, то как можно решить данный вопрос?
Пропишите себе макрос:
C++
1
#define mycin_clear(x) x.clear();while(x.get()!='\n');
В коде, где нужно используйте:
C++
1
mycin_clear(std::cin);
Yandex
Объявления
31.10.2012, 01:33     Не производиться ввод при помощи функции gets(s)
Ответ Создать тему
Опции темы

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