Завершение цикла, если пользователь выбирает определенную функцию
Привет, мне нужна небольшая помощь с проблемой!
У меня есть основной класс, который содержит цикл. Внутри этого цикла пользователь может вызывать различные функции, которые делают разные вещи, но я хочу, чтобы, если пользователь выбирает определенную функцию, он выводит сообщение, и цикл заканчивается.
Вот мой код:
#include <stdio.h>
void rest_at_inn();
void train();
void battle_demon_lord();
void Quit_Game();
int main() {
//Declare variable and pointer
float days_remaining = 8;
int current_hp = 10;
int hp_remaining = 10;
int MAX = 10;
int experience = 0;
int selection;
//Loops a menu that asks the user to make a selectio and repet it until either days or HP are less or equal to zero
do {
printf("Days remaining: %f, HP: %d, EXP: %dnn", days_remaining, hp_remaining, experience);
printf("1 - Rest at Innn");
printf("2 - Trainn");
printf("3 - Fight the Demon Lordn");
printf("4 - Quit Gamenn");
printf("Select: n");
scanf("%d", &selection);
printf("n");
//Execute the selection
switch (selection) {
case 1:
rest_at_inn(&days_remaining, &hp_remaining, &MAX);
break;
case 2:
train(&days_remaining, &hp_remaining, &experience);
break;
case 3:
battle_demon_lord(¤t_hp);
break;
case 4:
Quit_Game();
break;
}
} while (days_remaining > 0 && current_hp > 0);
return 0;
}
//This function reduces the days by 1 and resets the HP to 10
void rest_at_inn(float *days_remaining, int *hp_remaining, int *MAX) {
*hp_remaining = 10;
*days_remaining -= 1;
if (*days_remaining > 0)
printf("You rested up the at the innnn");
else /*(*days_remaining<=0)*/
printf("Game Over");
}
//This function reduces the days by 0.5 and the HP by 2 and adds 10 to the experience
void train(float *days_remaining, int *hp_remaining, int *experience) {
*experience += 10;
*hp_remaining = *hp_remaining - 2;
*days_remaining = *days_remaining - 0.5;
printf("You did some training!nn");
}
//This function sets the HP to 0 and prints a string
void battle_demon_lord(int *current_hp) {
*current_hp = 0;
printf("He's too strong!nn");
printf("Game Over!");
}
// This function prints a string
void Quit_Game() {
printf("Good bye!nn");
}
Я думаю, что это должен быть параметр в do_while, но у меня ничего не получилось.
4 ответа:
Вам нужно добавить условие выхода, когда пользователь выбирает 4.
Вы можете сделать это:
} while (days_remaining>0 && current_hp>0 && selection != 4);
Или вот это:
case 4 : Quit_Game(); return 0;
Или вот это:
void Quit_Game() { printf ("Good bye!\n\n"); exit(0); }
Если
switch
является последним оператором вашего цикла, добавьте переменную флагаmustQuit
Передdo
вашего цикла.do
/while
замкните петлю и установите ее на ноль. Когда конечный пользователь выбирает опцию quit, установитеmustQuit
в1
. Добавьте условие!mustQuit
в свой цикл.int mustQuit = 0; do { ... // some statements here switch (selection) { ... case 4 : mustQuit = 1; Quit_Game(); break; } } while (!mustQuit && days_remaining > 0 && current_hp > 0);
Если после
switch
имеется больше утверждений, то альтернатива с условнымbreak
в середине может быть более оптимальной:do { int mustQuit = 0; ... // some statements here switch (selection) { ... case 4 : mustQuit = 1; Quit_Game(); break; // this breaks the switch } if (mustQuit) { break; // this breaks the loop } ... // More statements here } while (days_remaining > 0 && current_hp > 0);
Я ожидаю, что вы хотите избежать цикла в
case 4
:Попробуйте использовать
goto
case 4 : Quit_Game(); goto out; break; } } while (days_remaining>0 && current_hp>0); out: return 0;
(1) Если вы хотите просто выйти из цикла do-while, вы можете добавить булеву переменную, чтобы при вводе последней опции она была ложной, например:
bool quit = false;
(...)
case 4 : quit = true; printf("Good bye!\n\n"); break;
И добавьте значение при условии do-while:
while (days_remaining>0 && current_hp>0 && !quit);
Итак, он выйдет из цикла do-while и продолжит код.
(2) Если вы хотите завершить программу, добавьте возвращаемое значение 0 и забудьте о логическом значении, например:
case 4 : printf("Good bye!\n\n"); return 0;
Помните: если вы делаем это на C-коде, он не будет поддерживать зарезервированные слова, такие как,
true
иfalse
. Вы должны использовать 0 для false и другое число для true, предпочтительно 1.