0 / 0 / 0
Регистрация: 24.09.2017
Сообщений: 11
1

При вводе символа программа зацикливается

03.10.2017, 20:10. Показов 2592. Ответов 4
Метки нет (Все метки)

Я пытался создать программу, которая при вводе отрицательного или типа не int выводит ошибку и просит ввести число ещё раз.
Мои размышления дошли до этого:
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
bool proverka(int chislo)
{
    while (chislo)
    {
 
 
 
        try
        {
            if (chislo <= 0)
            {
                cout << "Введите натуральное число\n";
                return FALSE;
            }
 
            else if (!cin >> chislo)
            {
                throw 1;
                return FALSE;
            }
            else
                return TRUE;
        }
        catch (int i)
        {
            cout << "Введите число целого типа.\n";
            return FALSE;
        }
 
    }
}
void get_chislo()
{
    int chislo;
    cout << "Введите число\n";
    cin >> chislo;
    if (!proverka(chislo))
    {
        cout << "Повторите ввод\n";
        get_chislo();
    }
    else
        cout << chislo;
}
 
 
 
 
 
 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    get_chislo();
    return 0;
}
При вводе отрицательного числа всё работает, но при вводе символа в консоли начинает бесконечно выводиться
Введите натуральное число
Повторите ввод
Введите число
Объясните как словить исключение (знаю, что у меня не правильно) или другой способ решения задачи. Спасибо за помощь!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2017, 20:10
Ответы с готовыми решениями:

При вводе в переменную нетипичного ей символа программа зацикливается
Проблема в том, что если ввести в программу символ отличный от цифры то программа зацикливается, а...

Программа зацикливается при вводе некорректных данных
Доброго дня. Уже искал по форуму, нашел много похожих тем, но предложенные там решения, в...

При вводе слишком большого числа программа зацикливается
При вводе слишком большого числа идет зацикливание(вроде так)помогите исправить #include...

Задание на ряды: программа зацикливается при вводе некоторых значений
Здравствуйте, решал вузовское задание &quot;на дом&quot;. Написал код. Однако при вводе некоторых значений...

4
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
04.10.2017, 07:11 2
Цитата Сообщение от Ducal_Boar Посмотреть сообщение
else if (!cin >> chislo)
А что эта строчка должна делать?

Попробуйте
C++
1
else if (cin.fail())
0
0 / 0 / 0
Регистрация: 24.09.2017
Сообщений: 11
04.10.2017, 16:06  [ТС] 3
Также не работает.
0
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
05.10.2017, 09:02 4
Цитата Сообщение от Ducal_Boar Посмотреть сообщение
Также не работает.
Да, верно. Не работает

К сожалению в ++сах нет готовой функции TryParse, поэтому приходится все писать вручную, перебором в цикле каждого символа. Вот рабочий вариант:
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
bool proverka(const char * chislo)
{
    std::string realnum = "";
 
    //if (strchr(chislo.c_str(),(int)'-') != NULL)
    if(chislo[0] == '-')
    {
        cout << "Input positive number\n";
        return false;
    }
    int i=0;while (i<strlen(chislo))
    {
        if (isdigit(chislo[i]))
        {
            realnum += chislo[i++];
        }
        else
        {
            cout << "Error. No Number\n";
            return false;
        }
    }
 
    return true;
}
 
void get_chislo()
{
 
    std::string data;
    cout << "Input int\n";
 
    cin >> data;
 
    //chislo = atoi(str.c_str());
    if (!proverka(data.c_str()))
    {
        cout << "Repeat input\n";
        get_chislo();
    }
    else
        cout << data;
}
0
15875 / 8638 / 2114
Регистрация: 30.01.2014
Сообщений: 14,864
05.10.2017, 09:16 5
Ducal_Boar, Объясните, почему программа циклится
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2017, 09:16
Помогаю со студенческими работами здесь

Зацикливается при вводе
Admin.h: #include&lt;string&gt; using namespace std; class Admin { string Login;//Логин...

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл?
void mainmenu() { cout &lt;&lt; &quot;Введи число&quot; &lt;&lt; endl; cin &gt;&gt; choice; if (choice == 1) { cout &lt;&lt;...

Класс "creditCard", программа зацикливается на вводе данных
прога не работает корректно! зацикливается на вводе данных и не выходит на exit #include...

Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе латинской буквы и "не латинская бук-ва" во всех остал
Составить программу, которая при вводе символа с клавиатуры выво-дит &quot;латинская буква&quot; при вводе...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru