Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Fatmarmelad
1 / 1 / 0
Регистрация: 20.02.2016
Сообщений: 421
#1

Для чего в код вводится cin.ignore после того, как cin>> уже сработало?

23.04.2017, 15:55. Просмотров 513. Ответов 1
Метки нет (Все метки)

Доброго времени суток!
Просматриваю простой код. Вводится строка типа string: фунты и дюймы Затем значения переводится в типы int и float.
При этом происходит проверка на ошибки. Бьюсь, не могу понять зачем в этом коде cin.ignore() введено. Проверка на лишнее нажатие Enter?
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
66
67
68
69
70
71
72
73
74
75
76
77
78
#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
int sfeet(string);
class dist
{
private:
    int foot;
    float inch;
public:
    dist() :foot(0),inch(0){}
    dist(int i, float f) :foot(i), inch(f){}
    void g_out()
    {cout << foot<<" ft-"<<inch<<" in "<<endl;}
    void g_in();
 
};
void dist::g_in()
{
    string s;
    while (true)
    {
        cout << "Enter feet:";
        cin.unsetf(ios::skipws);
        cin >> s;
        if (sfeet(s))
        {
            cin.ignore(10, '\n');
            foot = atoi(s.c_str());
            break;
 
        }
        cin.ignore(10, '\n');
        cout << "Wrong feet enter!";
 
    }
    while (true)
    {
        cout << "Enter inches:";
        cin.unsetf(ios::skipws);
        cin >> inch;
        if (inch >= 12.0 || inch < 0.0)
        {
            cout << "Value should be of 0 -1.99"";
            cin.clear(ios::failbit);
        }
        if (cin.good())
        {
            cin.ignore(10, '\n');
            break;
        }
        cin.clear();
            cin.ignore(10, '\n');
            cout << "Wrong inches enter!";
    }
};
int sfeet(string str)
{
    int len = str.size();
    if (len > 5 || len == 0)
        return 0;
    for (int j=0; j < len; j++)
        if ((str[j]<'0' || str[j]>'9') && str[j] != '-')
            return 0;
    double n = atof(str.c_str());
    if (n<-999.0 || n>999.0)
        return 0;
    return 1;
}
int main()
{
    dist d;
    d.g_in();
    d.g_out();
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2017, 15:55
Ответы с готовыми решениями:

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже...

Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода
Почему в моем случае getline(cin, m) не срабатывает без cin.ignore() ? Если по...

cin.getline и cin.ignore
Есть кусок кода в котором не могу разобраться. Если cin.ignore() есть, то...

Cin.clear cin.ignore
Как использовать cin.clear и cin.ignore?

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до...

1
nmcf
6260 / 5572 / 2532
Регистрация: 14.04.2014
Сообщений: 23,464
23.04.2017, 18:27 #2
Удаление всего, что там осталось, включая '\n'.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2017, 18:27

Исправить код, вызывающий cin.ignore(numeric_limits<streamsize>::max())
Возможно многие знают что если использовать библиотеку windows.h, и функцию...

Как работает Cin.ignore()
Дочитал до главы &quot;Потоки и файлы&quot; и с первого примера началось не понимание. ...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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