Swich

9 respostas
Anonner

Tenho um menu usando switch, porém eu fiz um switch dentro de um switch, como faço para voltar para o switch principal? Vale lembrar que eles não estão em nenhum método.

9 Respostas

Rodrigo_Sasaki

Poste seu código, mostre nele o que você quer fazer.

klebson_lou

quando voce dá um break ele sai do switch interno.

Anonner

Por exemplo:

char opcao2;
				do {
					opcao2 = menuContan();
					switch (opcao2){
					case '1':
                                       char opcao;
				do {
					opcao = menuConta();
					switch (opcao){
					case '1':

						break;
					case '2':
						break;
					case '3':
						break;
					case '4':
						break;
					case '5':
                                                 //AQUI QUERO VOLTAR PARA O PRIMEIRO SWITCH E SAIR DE DENTRO DESTE SWITCH
						break;
					default:
						InOut.MsgDeInformação("","opção inválida, tente novamente");
					}
				} while (opcao!='5');
				System.exit(0);
						break;
					case '2':
						break;
					case '3':
						break;
					case '4':
						break;
					case '5':
						break;
					default:
						InOut.MsgDeInformação("","opção inválida, tente novamente");
					}
				} while (opcao2!='5');
				System.exit(0);
}

Entendeu? O código não está com indentação, pois fiz ele diretamente no fórum, minha dúvida está no comentário aqui fiz.

ViniGodoy

Pode deixar assim mesmo.

Isso vai fazer com que o código vá até o while, e saia, por causa da condição.

Rodrigo_Sasaki
Tente assim:
char opcao2;
		LACO1:do{
			opcao2 = menuContan();
			switch (opcao2) {
				case '1':
					char opcao;
					LACO2:do{
						opcao = menuConta();
						switch (opcao) {
							case '1':

								break;
							case '2':
								break;
							case '3':
								break;
							case '4':
								break;
							case '5':
								continue LACO1;
								break;
							default:
								InOut.MsgDeInformação("", "opção inválida, tente novamente");
						}
					} while (opcao != '5');
					System.exit(0);
					break;
				case '2':
					break;
				case '3':
					break;
				case '4':
					break;
				case '5':
					break;
				default:
					InOut.MsgDeInformação("", "opção inválida, tente novamente");
			}
		} while (opcao2 != '5');
		System.exit(0);
Anonner

@Godoy

Não funciona, já tentei.

@Digao

Cara, funciono perfeitamente, muito obrigado! :smiley:
Eu não sabia que poderia fazer esse tipo de “laço”.

ViniGodoy

Anonner:
@Godoy

Não funciona, já tentei.

Ah sim, vc não deveria deixar a opção 5 dentro do seu switch. Não deve haver break para ela.

PS = Switch dentro de Switch é no mínimo feio. Por que não divide seu código em funções?

Rodrigo_Sasaki

Eu concordo, apesar da solução ter funcionado, não acredito que seja a melhor maneira, ainda mais porque parece incorreto, o seu while deveria funcionar.

Agora se quiser entender mais sobre a solução que eu sugeri, pesquise por Labeled Loops.

Anonner

Eu sei que é feio. Porém estou com preguiça e um pouco de pressa, acredito também que não irei perder pontos por isto. Depois do ‘continue’ não pode haver o break, pois ele é como se fosse um break.
Valeu pela ajuda e pelas dicas. Vou dá uma pesquisada sim. :smiley:

Criado 26 de junho de 2012
Ultima resposta 26 de jun. de 2012
Respostas 9
Participantes 4