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

Как перезапускать цикл?

24.02.2024, 20:33. Показов 788. Ответов 13
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Это функция создания нового персонажа, и если какая-то проверка не проходит, то цикл должен начинаться заного, но он продолжается. Как перезапускать цикл?

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
void NewCharacter(string &name, int &age) {
    cout << "Welcome to Mining game on C++" << endl;
    char namee;
    bool in_reg = true, namereg = true, agereg = false;
    while (in_reg) {
        while (namereg) {
            cout << "Choose name for your character: ";
            cin >> namee;
            name = namee;
            if (isupper(namee) != 1) {
                cout << "The name must start with a capital letter!" << endl;
                return;
            } else if (name.length() >= 20) {
                cout << "Character name lenght exceeds 20!" << endl;
            } else if (IsDigitCheck(name) != 0) {
                cout << "The name cannot contain numbers!" << endl;
            } else if (RussianLettersCheck(name) != 0) {
                cout << "The name cannot contain Russian letters(C++ does not allow)!" << endl;
            }
            agereg = true;
            namereg = false;
        }
        while (agereg) {
            cout << "Now choose age for your character: ";
            cin >> age;
            if (IsDigitCheck(to_string(age)) == 0) {
                cout << "The age cannot contain letters!" << endl;
            } else if (age > 35) {
                cout << "The age should not be more than 35!" << endl;
            } else if (age < 16) {
                cout << "The age must not be less than 16!" << endl;
            }
            agereg = false;
        }
        cout << "A new character has been created!" << endl;
        in_reg = false;
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.02.2024, 20:33
Ответы с готовыми решениями:

Как не перезапускать программу?
Написал калькулятор, запустил, после одного вычисления приходиться перезапускать калькулятор, для того чтобы сделать ещё одно! что надо...

Как перезапускать сервер, в случае ошибок?
Есть самописный сервер. Он поднимается при запуске, через функцию main. if __name__ == &quot;__main__&quot;: и так далее Как сделать...

Как перезапускать дочерний процесс в случае его краха?
Есть дочерний процесс, надо его контролить, и в случае если он падает, перезапускать. Как его контролить?

13
фрилансер
 Аватар для Алексей1153
6444 / 5639 / 1128
Регистрация: 11.10.2019
Сообщений: 15,007
24.02.2024, 20:56
Tulsk1y2, вынеси этот цикл в функцию, возвращающую bool. Если что-то не так, делай return false, а в конце функции return true

снаружи можно решить - вызвать функцию заново или нет
0
2 / 2 / 0
Регистрация: 26.08.2023
Сообщений: 166
24.02.2024, 21:01  [ТС]
это и есть функция.
0
фрилансер
 Аватар для Алексей1153
6444 / 5639 / 1128
Регистрация: 11.10.2019
Сообщений: 15,007
24.02.2024, 21:04
Tulsk1y2, ещё пока нет. Но надо сделать Или в лямбду, чтобы не светить наружу
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,201
24.02.2024, 21:11
Цитата Сообщение от Tulsk1y2 Посмотреть сообщение
заного


Цитата Сообщение от Tulsk1y2 Посмотреть сообщение
но он продолжается. Как перезапускать цикл?
Что такое "перезапустить" и чем оно отличается от "продолжается"? Я не вижу в ваших циклах никаких счетчиков или еще чего-то, что можно было бы переинициализировать, чтобы "начать сначала". Что тогда значит "перезапустить"? Какая разница в вашем случае, перезапустился цикл или просто продолжается? О чем вы ведете речь?

И о каком именно цикле вообще?
0
2 / 2 / 0
Регистрация: 26.08.2023
Сообщений: 166
24.02.2024, 21:19  [ТС]
А как быть, если игрок допустит ошибку при вводе возраста? Он же будет заново переписывать имя.

Добавлено через 6 минут
Ну вот игрок сделал одну ошибку, цикл должен начаться с начала.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,201
24.02.2024, 21:23
Цитата Сообщение от Tulsk1y2 Посмотреть сообщение
Ну вот игрок сделал одну ошибку, цикл должен начаться с начала.
Так циклы всегда начинаются "с начала". В этом вся идея цикла: это кусочек кода, который выполняется снова и снова. Когда он доходит до конца, он опять начинает выполняться с начала.

Чем вас это не устраивает? О каком другом "с начала" вы ведете речь?
0
2 / 2 / 0
Регистрация: 26.08.2023
Сообщений: 166
24.02.2024, 21:26  [ТС]
У меня этот код просто продолжается, а на следующем цикле, где записывается age, за место него, записывается сама ошибка, и при этом всё записывается в файл.

P.S. Вот вывод:
Code
1
2
3
4
5
Welcome to Mining game on C++
Choose name for your character: artem
The name must start with a capital letter!
Now choose age for your character: The age must not be less than 16!
A new character has been created!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,201
24.02.2024, 21:55
Цитата Сообщение от Tulsk1y2 Посмотреть сообщение
Choose name for your character: artem
Не понял.

У вас в программе имя персонажа должно состоять из одной буквы. Почему вы вводите "artem". Это пять букв.

Если вы вводите "artem", то имя персонажа будет a, а rtem - это будет возраст персонажа. Разумеется, получается чушь.
0
2 / 2 / 0
Регистрация: 26.08.2023
Сообщений: 166
24.02.2024, 21:57  [ТС]
Всмысле из одной буквы? Нужно с заглавной.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,201
24.02.2024, 21:59
Цитата Сообщение от Tulsk1y2 Посмотреть сообщение
C++
1
2
            cin >> age;
            if (IsDigitCheck(to_string(age)) == 0) {
Также, что это за странная проверка? age - это переменная типа int. Какой смысл проверять ее на цифры, если в числе всегда присутствуют только цифры и больше ничего.

Цитата Сообщение от Tulsk1y2 Посмотреть сообщение
Всмысле из одной буквы?
Ну вы же сами написали

C++
1
2
3
4
char namee;
...
cout << "Choose name for your character: ";
cin >> namee;
char - это один символ. Вы вводите один символ. Одну букву.
0
2 / 2 / 0
Регистрация: 26.08.2023
Сообщений: 166
24.02.2024, 22:01  [ТС]
Просто мне показалось , что с++ без разницы, число там или нет. Наверное ошибся. Через try сделать получается, чтоб ошибок не было?

Добавлено через 1 минуту
namee нужно для проверки, что первая буква находится в верхнем регистре, т.к. там только char, нельзя использовать string.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,201
24.02.2024, 22:06
Лучший ответ Сообщение было отмечено Tulsk1y2 как решение

Решение

Цитата Сообщение от Tulsk1y2 Посмотреть сообщение
Просто мне показалось , что с++ без разницы, число там или нет.
Это как это? Тип int может хранить только целые числа и больше ничего. Проверять int не тему того, число это или не число, смысла нет. Это всегда гарантированно число.

Цитата Сообщение от Tulsk1y2 Посмотреть сообщение
namee нужно для проверки, что первая буква находится в верхнем регистре, т.к. там только char, нельзя использовать string.
Не понял.

Еще раз: вы считываете из пользовательского ввода только одну-единственную букву. То есть вы вводите artem, но считываете только a, а остаток rtem остается непрочитанным.

Затем в строке 9 вы запихиваете эту букву в name и далее делаете какие-то странные проверки вроде

C++
1
2
             if (name.length() >= 20) {
                cout << "Character name lenght exceeds 20!" << endl;
Как длина name может быть больше 20, если вы в name только что запихали одну-единственную букву?

Также, а что делать с остатком rtem, если вы считываете только первую букву a? Этот остаток остается сидеть в пользовательском вводе и далее ваша программа пытается его считать в качестве возраста персонажа. Происходит ошибка чтения, так как rtem - это не целое число.

Цитата Сообщение от Tulsk1y2 Посмотреть сообщение
нельзя использовать string
??? Что это значит? У вас у коде уже используется std::string.
0
2 / 2 / 0
Регистрация: 26.08.2023
Сообщений: 166
24.02.2024, 22:09  [ТС]
До меня дошло. Надо вписывать наоборот name, а потом в isupper проверять его нулевой индекс, т.е. его первую букву. Но на счёт этого не точно, может надо в namee записать нулевой индекс имени. Тогда все проверки должны проходить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.02.2024, 22:09
Помогаю со студенческими работами здесь

Как из моего приложения перезапускать какую-либо программу с использованием таймера?
Как мне из моего приложения перезапускать какую-либо программу например с использованием таймера? Очень нужно! заранее спасибо.

Автоматически перезапускать скрипт
Как контролировать постоянно работающий скрипт, чтобы при вылетах его перезапускать? Как вариант, можно даже перезапускать скрипт просто по...

Приходится перезапускать проводник
Всем привет. В общем проблема такая. После запуска компа он перестает реагировать на команды мышки. То есть я например могу открыть папку,...

Диспетчер печати приходится перезапускать
Доброе утро всем,столкнулся с такой проблемой,каждое утро приходиться перезапускать диспетчер очереди печати.В свойствах он стоит...

В LogCat ничего нет, приходится перезапускать
Очень часто в LogCat пропадают все данные. Это исправляется только рестартом Эклипса... кто-нибудь сталкивался с такой проблемой? Как...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru