CURSO DE C

 

O Comando goto

O goto é o último comando de controle de fluxo. Ele pertence a uma classe à parte: a dos comandos de salto incondicional. O goto realiza um salto para um local especificado. Este local é determinado por um rótulo. Um rótulo, na linguagem C, é uma marca no programa. Você dá o nome que quiser a esta marca. Podemos tentar escrever uma forma geral:

 

nome_do_rótulo:
....

goto nome_do_rótulo;
....

 

Devemos declarar o nome do rótulo na posição para a qual vamos dar o salto seguido de :. O goto pode saltar para um rótulo que esteja mais à frente ou para trás no programa. Uma observação importante é que o rótulo e o goto devem estar dentro da mesma função. Como exemplo do uso do goto vamos reescrever o equivalente ao comando for apresentado na seção equivalente ao mesmo:

 

início_do_loop:

O comando goto deve ser utilizado com parcimônia, pois o abuso no seu uso tende a tornar o código confuso. O goto não é um comando necessário, podendo sempre ser substituído por outras estruturas de controle. Puristas da programação estruturada recomendam que o goto nunca seja usado. Porém, em algumas situações muito específicas o comando goto pode tornar um código mais fácil de se entender se ele for bem empregado. Um caso em que ele pode ser útil é quando temos vários loops e ifs aninhados e se queira, por algum motivo, sair destes loops e ifs todos de uma vez. Neste caso um goto resolve o problema mais elegantemente que vários breaks, sem contar que os breaks exigiriam muito mais testes. Ou seja, neste caso o goto é mais elegante e mais rápido. Mas não abuse!!!

O exemplo da página anterior pode ser reescrito usando-se o goto:

#include <stdio.h>
int main()
{
	int opcao;
	while (opcao != 5)
       	{
		REFAZ: printf("\n\n Escolha uma opcao entre 1 e 5: ");
       		scanf("%d", &opcao);
       		if ((opcao > 5)||(opcao <1)) goto REFAZ;  /* Opcao invalida: volta ao rotulo REFAZ */
       		switch (opcao)
          	{ 
          		case 1: 
               			printf("\n --> Primeira opcao..");
          		break; 
          		case 2: 
               			printf("\n --> Segunda opcao..");
          		break; 
          		case 3: 
               			printf("\n --> Terceira opcao..");
          		break; 
         		case 4: 
               			printf("\n --> Quarta opcao..");
          		break; 
          		case 5: 
               			printf("\n --> Abandonando..");
          		break; 
          	} 
       	}
	return(0);
}

 


AUTO AVALIAÇÃO

Veja como você está.

Escreva um programa que peça três inteiros, correspondentes a dia , mês e ano. Peça os números até conseguir valores que estejam na faixa correta (dias entre 1 e 31, mês entre 1 e 12 e ano entre 1900 e 2100). Verifique se o mês e o número de dias batem (incluindo verificação de anos bissextos). Se estiver tudo certo imprima o número que aquele dia corresponde no ano. Comente seu programa.

PS: Um ano é bissexto se for divisível por 4 e não for divisível por 100, exceto para os anos divisíveis por 400, que também são bissextos.


Página Anterior Índice da AulaPróxima Página


Curso de C do CPDEE/UFMG - 1996 - 1999