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

Проверка корректности ввода - C++

Восстановить пароль Регистрация
 
fisharik
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 4
14.02.2014, 21:22     Проверка корректности ввода #1
Есть класс Point, в котором поля int X, int Y, int Z; (X должен быть больше Y)
Есть конструктор без параметров
C++
1
2
3
4
5
6
7
8
Point::Point(){
    cout << "Enter X: ";
    cin >> X;
    cout << "Enter Y: ";
    cin >> Y;
    cout << "Enter Z: ";
    cin >> Z;
}
Как мне сделать, чтобы ввод начинался занова, если пользователь неверно ввел данные(например, ввел буквы или нецелые числа, и если X<Y то тоже занова)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
14.02.2014, 21:51     Проверка корректности ввода #2
Наверно в конструкторе проверять надо
fisharik
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 4
14.02.2014, 21:54  [ТС]     Проверка корректности ввода #3
Это да. Мне сама проверка нужна.
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
14.02.2014, 22:00     Проверка корректности ввода #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 Point::Point(){
    cout << "Enter X: ";
    while((cin >> X)&& (!cin.good())
{
cout<<"Try again! Enter X:";
}
    cout << "Enter Y: ";
    while(((cin >> Y)&& (!cin.good())||((X<Y)&& (cin.good())))
{
cout<<"Try again! Enter Y:";
}
    cout << "Enter Z: ";
    while((cin >> Z)&& (!cin.good())
{
cout<<"Try again! Enter Z:";
}
}
fisharik
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 4
14.02.2014, 22:10  [ТС]     Проверка корректности ввода #5
неправильно работает. при вводе Y ввожу символ, и программа заканчивается.
Когда ввожу числа, проверка X>Y работает.
somebdy
7 / 7 / 1
Регистрация: 30.04.2013
Сообщений: 25
14.02.2014, 22:35     Проверка корректности ввода #6
fisharik, такой вариант
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
template <typename T>
bool input(const char * msg, T & dest) {
    std::cout << msg;
 
    if (std::cin >> dest)
        return true;
 
    std::cin.clear();
    std::cin.get();
 
    return false;
}
 
Point::Point() {
    do {
        while(!input("Enter X: ", X))
            std::cout << "Error! Try Again!\n";
        while(!input("Enter Y: ", Y))
            std::cout << "Error! Try Again!\n";
        if (X < Y)
            std::cout << "Error! X must be greater than Y!\n";
    } while (X < Y);
 
    while (!input("Enter Z: ", Z))
        std::cout << "Error! Try Again!\n";
}
Yandex
Объявления
14.02.2014, 22:35     Проверка корректности ввода
Ответ Создать тему
Опции темы

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