Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 6
1

Защита от некорректного ввода

10.09.2019, 19:56. Просмотров 1172. Ответов 4
Метки нет (Все метки)

Здравствуйте. 1 курс, полный нуб. Знаю только cin и cout, массивы. Пока все было нормально, но препод требует написать защиту от дурака, чтобы если вводились только целые числа, а в других случаях требовалось ввести еще раз
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
#include <iostream>
#include <cstdlib> 
using namespace std;
 
int main() 
{ 
    bool check = true;
    while(check == true)
    {   
        int c = 0;
        cout << "Input a start year: " ;
        int a;  
        cin >> a;           
        cout << "Input a final year: " ;
        int b;
        cin >> b;
 
        if( a <= b ) 
            {
                for(a = a; a<=b ; a++ )
                    { 
                        if(a % 4 !=0 || a % 100 == 0 && a % 400 !=0)
                        {
                            c = c;
                        }
                            else c = c + 1;
                    }
                cout << "The number of leap years: " << c << endl;
                cout << "Again?(Y/N) " ;
                char ans;
                cin >> ans;
        if(ans == 'Y')
        {
            check = true;
        } 
            else if( ans == 'N') check = false;
 
            } 
            else cout << "the first year must be less than the second, try again. ";
        
    }
    system("pause");
    return 0; 
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2019, 19:56
Ответы с готовыми решениями:

Защита от некорректного ввода
Здравствуйте. 1 курс, полный нуб. Знаю только cin и cout, массивы. Пока все было нормально, но...

Защита от некорректного ввода
Приветствую, помогите, пожалуйста, реализовать защиту от некорректного ввода. Должны быть...

Защита от некорректного ввода
Помогите, пожалуйста, с защитой от некорректного ввода! Программа выполняет задания с помощью...

Защита от некорректного ввода
Подскажите пожалуйста как доработать защиту от некорректного ввода: // ConsoleApplication4.cpp :...

4
486 / 284 / 127
Регистрация: 30.10.2018
Сообщений: 1,309
10.09.2019, 20:20 2
Лучший ответ Сообщение было отмечено starsinc как решение

Решение

starsinc, примерно это называеться проверкой:

C++
1
2
3
4
5
6
7
8
cout << "Input a start year: ";
    int a;
    while (!(cin >> a))
    {
        cin.clear();
        while (cin.get() != '\n');
        cout << "Input a start year: ";
    }
cin.clear() - очищает поток, что бы ты понял, если на вход ожидаеться цифра, а приходит слово, то поток не понимает что делать и постоянно пытаеться записать это в цифру, и выходи бесконечный цикл.

cin.get() - берет посимвольно данные из потока
1
Нарушитель
4606 / 2497 / 567
Регистрация: 12.03.2015
Сообщений: 12,259
10.09.2019, 22:38 3
Цитата Сообщение от starsinc Посмотреть сообщение
Знаю только cin и cout
Пора потерять девственность с изучением printf()/scanf().
0
793 / 485 / 205
Регистрация: 19.01.2019
Сообщений: 1,167
10.09.2019, 23:44 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <regex>
 
int main()
{
    std::string buff;
    int num;
 
    std::cout << "Input a start year: ";
    do {
        std::getline(std::cin, buff);
        if (!buff.empty() && buff == std::regex_replace(buff, std::regex("\\D"), "")) {
            num = std::stoi(buff);
            break;
        }
        std::cout << "error\n";
    } while (true);
 
    return 0;
}
0
бах-бах и в продакшен!
2002 / 1188 / 442
Регистрация: 23.09.2014
Сообщений: 3,774
Записей в блоге: 4
11.09.2019, 01:46 5
starsinc,
мой вариант
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>
#include <cstdlib>
using namespace std;
 
template<class T>
T input_user(const char* promt)
{   std::cout << promt << " ";
    T my;
    while(!(std::cin>>my) || std::cin.get() != '\n')
    {   std::cout << "Incorrect input!\n\n";
        std::cout << promt << " ";
        std::cin.clear();
        std::cin.sync();
    }
    return my;
}
 
int main()
{   bool check = true;
    while(check == true)
    {   int c = 0;
    
        int a = input_user<int>("Input a start year:");
        int b = input_user<int>("Input a final year:");
 
        if( a <= b )
        {   for(a = a; a<=b ; a++ )
            {   if(a % 4 !=0 || a % 100 == 0 && a % 400 !=0)
                {   c = c;
                }
                else c = c + 1;
            }
            cout << "The number of leap years: " << c << endl;
            char ans = input_user<char>("Again?(Y/N):");
            if(ans == 'Y' || ans == 'y')
            {   check = true;
            }
            else if( ans == 'N' || ans == 'n') check = false;
 
        }
        else cout << "the first year must be less than the second, try again. ";
    }
    
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2019, 01:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Защита от некорректного ввода
Будьте добры, помогите написать защиту от дурака на ввод массива элементы которого тип float...

Защита от некорректного ввода
Помогите сделать так, что при вводе букв программа продолжала работать: запрещала ввод букв(только...

Защита от некорректного ввода
Здравствуйте! Нужно осуществить контроль при заполнении матрицы, если введены не корректные...

Защита от некорректного ввода double
Прошу помощи с защитой от некорректного ввода. Сам студент 1 курса - на лекциях ничего толком не...


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

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

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