Я только что задал тот же вопрос, но вопрос закрыт, может быть, я нарушил правила ... или беспорядок.
В любом случае я знаю о выходе из цикла, например break, while(bool), return, n=1, n=0 while(n), Мне нужен другой метод, отличный от вышеуказанного.
Я решил эту проблему с помощью while(mode!=2) спасибо за все, что ответили на мой незрелый вопрос :) я обещаю тщательно изучить ваши отзывы!
Вопрос закрыт.
Вот моя структура кода :) ↓
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main() {
int mode=1;
while (mode != 2)
{
printf("\ninput: "); scanf("%d", &mode);
switch (mode)
{
case 1: printf("\none"); Sleep(1500); break;
case 2:
printf("\nsomething");
Sleep(1500);
break;
default: printf("\nStackOverFlow"); break;
}
}
return 0;
}
Проблема, с которой вы столкнулись, заключается в том, что break в этот момент относится к вложенному оператору switch, а не к циклу while, который его содержит. C не имеет многоуровневого break.
Какую проблему ты пытаешься решить? Что вам нужно, чего не хватает break, return и условиям цикла?
Отвечает ли это на ваш вопрос? Как выйти из вложенных циклов?
Редактирование кода в вопросе после получения ответов/комментариев делает их недействительными. И ваше новообретенное решение может не сработать.
Избегайте использования имен переменных, которые являются ключевыми словами C.
Извините, я не хотел дублировать вопрос.
Я редактирую свой код, чтобы он работал сейчас, и, как вы знаете, scanf работает, когда проверяется SDL, в целях безопасности отключено условие.
Я только что заметил, что перепутал регистр с переменной режима, которую я изначально должен был ввести.
Это приведет только к выходу из цикла while.
while (true) {
...
if (some condition) {
goto CLEANUP;
}
...
}
CLEANUP:
...
while (true) {
...
if (some condition) {
exit (EXIT_FAILURE);
/* OR, if in the `main()` function: */
return EXIT_FAILURE;
}
....
}
while (true) {
...
if (some condition) {
abort ();
}
...
}
Некоторые другие альтернативы, которые сделают гораздо больше, чем просто выход из цикла while, включают:
raise()
.quick_exit()
._Exit()
._exit
. (Обратите внимание, что это не определено в стандарте C, это расширение POSIX)
Распространенным способом решения этой проблемы является использование логической переменной состояния вместо жестко запрограммированного бесконечного цикла. Если он используется как часть условия цикла или как отдельное условие для break, это не имеет большого значения и больше зависит от вашего варианта использования.