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

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

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

Студворк — интернет-сервис помощи студентам
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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; } else if(lygis=='n' ||...

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

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

9
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
09.02.2018, 22:55
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
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.02.2018, 23:10
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
Yetty, && замени на || , а то у тебя бесконечный цикл будет,даже когда введут 1 или 2
0
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
09.02.2018, 23:25  [ТС]
Цитата Сообщение от RostikTawer Посмотреть сообщение
А конкретно
Когда ввожу не cin, так программа бесконечно пишет: Не верное значение. Введите заново:
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
09.02.2018, 23:33
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
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.02.2018, 23:35
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  [ТС]
Yetty, мне где cin
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.02.2018, 23:48
Цитата Сообщение от Terminator004 Посмотреть сообщение
Yetty, мне где cin
это Вы сами смотрите куда Вам его нужно поставить. блок который я сбросил поставьте между своими строками 10-11 чтобы посмотреть как он работает - а дальше уже сами ставьте его куда считаете нужным
0
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
09.02.2018, 23:51  [ТС]
Цитата Сообщение от RostikTawer Посмотреть сообщение
хз ка кэто фиксить
Я сделал. Вот так:
C++
1
2
3
4
5
6
7
 while (!(cin >> menu))
        {
            cin.clear();
           cin.ignore(10000, '\n');
 
                cout << "Не верное значение. Введите заново:\n";
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2018, 23:51
Помогаю со студенческими работами здесь

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

Объясните пожалуйста как работают 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 WorkWithBooks(int Books) { if (Books &gt; 0) ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru