Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
31 / 34 / 18
Регистрация: 30.09.2011
Сообщений: 202
1

Написать код, проверяющий корректность ввода

01.01.2016, 17:08. Показов 1405. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа должна следить, чтоб вместо цифр не ввели буквы, или вместо целого числа не ввели вещественное... также он должна следить, чтоб перед вводом не было пробелов и Enter... но при вводе Enter начинаются проблемы, прога просто перескакивает строку
C++
1
cin >> str;
и соответственно зацикливается... вот код (проблемное место пометил комментарием):

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <string>
 
using namespace std;
 
int isfeet (string);
 
class Distance
{
private:
    int feet;
    float inches;
public:
    Distance (): feet (0), inches (0.0)
    {  }
    Distance (int ft, float inch): feet (ft), inches (inch)
    {  }
    void showdist () const
    {   // исправлено: управляющая последовательность \ "
        // заменена на 16-ричное представление '\x22'
        cout << feet << "\' - " << inches << '\x22';
    }
    void getdist ();
};
 
void Distance::getdist ()
{
    string str;
    while (true)
    {
        cout << "Введите количество футов: ";
        cin.unsetf (ios::skipws);
        cin >> str;                    ///// SOS!!!
        if (isfeet(str))
        {
            cin.ignore(10, '\n');
            feet = atoi(str.c_str());
            break;
        }
        cin.ignore(10, '\n');
        cout << "Футы должны быть целым числом <1000\n";    
    }
    while (true)
    {
        cout << "Введите дюймы: ";
        cin.unsetf (ios::skipws);
        cin >> inches;
        if (inches < 0.0 || inches >= 12.0)
        {
            cout << "Дюймы должны быть >0.0 и меньше <12.0!!!\n";
            cin.clear(ios::failbit);
        }
        if (cin.good ())
        {
            cin.ignore(10, '\n');
            break;
        }
        cin.clear();
        cin.ignore(10, '\n');
        cout << "Неверно введены дюймы!!!\n";
    }
}
 
int isfeet (string s)
{
    int len = s.size ();
    if (len == 0 || len >= 5)
        return 0;
    for (int j = 0; j < len; j++)
        if ((s[j] < '0' || s[j] > '9') && s[j] != '-')
            return 0;
    double d = atof (s.c_str ());
    if (d < -999.0 || d > 999.0)
        return 0;
    return 1;
}
 
int main ()
{
    setlocale (LC_ALL, "Rus");
    char answ;
    Distance d;
    do
    {
        d.getdist ();
        cout << "\nd = "; d.showdist ();
        cout << "\nПродолжить (y/n)??? "; cin >> answ;
        cin.ignore(10, '\n');
    }
    while (answ != 'n');
    cout << endl;
    return 0;
}
P.S: модеры обратите внимание: не могу поставить \ в 19 строке исправьте плиз!!!!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2016, 17:08
Ответы с готовыми решениями:

Написать код, проверяющий корректность ввода
Как сделать так, чтобы при вводе k значения не прописанного, выводить сообщение об ошибке? Т.е....

Написать код, проверяющий корректность ввода
Как сделать так что при вводе времени которого не существует, например 32:54 выбивало ошибку, а не...

Придумать валидатор, проверяющий корректность строки
Программа нужна с использованием Qt5 на Visual Studio с использованием класса QString. В...

Создать валидатор, проверяющий корректность строки
Используя приложенный проект, создать валидатор, проверяющий корректность строки. Необходимо...

4
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
01.01.2016, 18:20 2
Лучший ответ Сообщение было отмечено Lawliet1 как решение

Решение

C++
1
2
3
4
5
6
7
8
int N;
while(!(cin>>N) || N<-100500 || N>100500)
{
    cin.clear();//а вот без этого работать не будет
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
    cout<<"WTF?"<<endl;
}
cout<<N<<endl;
1
31 / 34 / 18
Регистрация: 30.09.2011
Сообщений: 202
01.01.2016, 18:46  [ТС] 3
хм, то есть пока установлен флаг какой-либо ошибки ввод не принимается? или как?
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
01.01.2016, 19:03 4
Цитата Сообщение от Lawliet1 Посмотреть сообщение
хм, то есть пока установлен флаг какой-либо ошибки ввод не принимается? или как?
Именно. Пока установлен флаг ошибки, поток будет отказываться работать. Хотя, уже введенное сохранит в буфере обмена.
1
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
01.01.2016, 19:14 5
По-хорошему надо бы ещё flush вызывать, eof проверять; раз пробелы в начале нельзя, тогда ещё проверку, чтобы peek() давал цифру до ввода и '\n' после.
1
01.01.2016, 19:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.01.2016, 19:14
Помогаю со студенческими работами здесь

Написать код, проверяющий на установку флаг ZF
Написать код, проверяющий на установку флаг ZF. Приведите пример операции (и добавьте ее в код),...

Корректность ввода
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;string&gt; #include&lt;locale.h&gt; using namespace std; ...

Корректность ввода
Можно ли сделать, так чтобы в поле с типом строка не вводились цифры. Допустим есть справочник...

Корректность ввода
На TEdit стоит обработка, что можно вводить только буквы. Кнопка &quot;Удалить&quot; не работает совсем, т.е....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru