Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
1

Опять проверять cin

09.02.2018, 22:47. Показов 538. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int menu, vvesti;
    cout << "Игра \"Угадай число\". " << endl;
    cout << "Если вы хотите продолжить игру, напишите 1\nЕсли хотите выйти из игры, напишите 2: ";
    do
    {
        cin >> menu;
 
        if (!cin)
        {
            cout << "Не верное значение. Введите заново:\n";
            break;
        }
 
        if(menu == 1 )
        {
            cout<< "Игрок №1 должен ввести число, которое игрок №2 будет угадывать: ";
            cin >> vvesti;
 
            if (!cin)
            {
                cout << "Не верное значение.\n";
 
            }
        }
        else if(menu == 2)
            exit(0);
        else
            cout << "Неверное число, введите заново\n";
    }
    while(menu!=1);
    return 0;
}
Как сделать, чтоб где:
C++
1
2
3
4
5
6
7
 cin >> menu;
 
        if (!cin)
        {
            cout << "Не верное значение. Введите заново:\n";
            break;
        }
Так можно было бы опять повторно ввести, а не выключалась бы программа.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2018, 22:47
Ответы с готовыми решениями:

Как опять запрашивать cin?
char lygis; cin &gt;&gt; lygis; if(lygis=='l' || lygis=='L') { cout &lt;&lt; &quot;да.&quot;&lt;&lt;endl; ...

Опять про cin.getline и невызов
я знаю, что вопрос много раз поднимался, но везде ссылки или описания типа делай так и все - это я...

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

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

9
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
09.02.2018, 22:55 2
Terminator004,
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
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int menu, vvesti;
    cout << "Игра \"Угадай число\". " << endl;
    cout << "Если вы хотите продолжить игру, напишите 1\nЕсли хотите выйти из игры, напишите 2: ";
    do
    {
        cin >> menu;
 
        while (!cin)
        {
            cout << "Не верное значение. Введите заново:\n";
            cin >> menu;
        }
 
        if (menu == 1)
        {
            cout << "Игрок №1 должен ввести число, которое игрок №2 будет угадывать: ";
            cin >> vvesti;
 
            if (!cin)
            {
                cout << "Не верное значение.\n";
 
            }
        }
        else if (menu == 2)
            exit(0);
        else
            cout << "Неверное число, введите заново\n";
    } while (menu != 1);
    return 0;
}
А конкретно
C++
1
2
3
4
5
6
7
cin >> menu;
 
        while (!cin)
        {
            cout << "Не верное значение. Введите заново:\n";
            cin >> menu;
        }
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.02.2018, 23:10 3
Terminator004, это нужно?

C++
1
2
3
4
5
6
 do
    {
    cin >>menu;
    if (menu !=1 && menu !=2) cout <<"Enter 1 or 2, Repeat please...\n";
    }
    while (menu !=1 && menu !=2);
0
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
09.02.2018, 23:16 4
Yetty, && замени на || , а то у тебя бесконечный цикл будет,даже когда введут 1 или 2
0
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
09.02.2018, 23:25  [ТС] 5
Цитата Сообщение от RostikTawer Посмотреть сообщение
А конкретно
Когда ввожу не cin, так программа бесконечно пишет: Не верное значение. Введите заново:
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
09.02.2018, 23:33 6
Terminator004,
Есть ошибка, если ввести два символа, неверных, то напишет сообщение 2 раза, и так дальше(3 то 3), хз ка кэто фиксить, ну можно еще сделать оператор выбора, там проще будет, но если много числ то не вариант
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int menu, vvesti;
    cout << "Игра \"Угадай число\". " << endl;
    cout << "Если вы хотите продолжить игру, напишите 1\nЕсли хотите выйти из игры, напишите 2: ";
    do
    {
        cin >> menu;
    
        while (!(cin >> menu))
        {
            cin.clear();
            while (cin.get() != '\n') {
                
                cout << "Не верное значение. Введите заново:\n";
 
            }
        }
 
        if (menu == 1)
        {
            cout << "Игрок №1 должен ввести число, которое игрок №2 будет угадывать: ";
            cin >> vvesti;
 
            if (!cin)
            {
                cout << "Не верное значение.\n";
 
            }
        }
        else if (menu == 2)
            exit(0);
        else
            cout << "Неверное число, введите заново\n";
    } while (menu != 1);
    return 0;
}
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.02.2018, 23:35 7
Gaveyn, вроде работает, нужно что-то менять?
3
Enter 1 or 2, Repeat please...
4
Enter 1 or 2, Repeat please...
2
RRR
0
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
09.02.2018, 23:44  [ТС] 8
Yetty, мне где cin
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.02.2018, 23:48 9
Цитата Сообщение от Terminator004 Посмотреть сообщение
Yetty, мне где cin
это Вы сами смотрите куда Вам его нужно поставить. блок который я сбросил поставьте между своими строками 10-11 чтобы посмотреть как он работает - а дальше уже сами ставьте его куда считаете нужным
0
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
09.02.2018, 23:51  [ТС] 10
Цитата Сообщение от RostikTawer Посмотреть сообщение
хз ка кэто фиксить
Я сделал. Вот так:
C++
1
2
3
4
5
6
7
 while (!(cin >> menu))
        {
            cin.clear();
           cin.ignore(10000, '\n');
 
                cout << "Не верное значение. Введите заново:\n";
        }
0
09.02.2018, 23:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2018, 23:51
Помогаю со студенческими работами здесь

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

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

Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами
Нужна помощь. Задача продемонстрировать различие между вводом с помощью cin.get и cin.getline с...

Объясните работу методов cin.getline и cin.ignore
Фрагмент программы ниже. Что делают cin.getline и cin.ignore (12-13 строки) void...


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

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