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 utlizado com parcimônia, pois o abuso no seu uso tende a tornar o código confuso. O goto não é um comando necessário, mas o seu bom emprego pode facilitar o entendimento de algumas funções. Há quem diga que o goto nunca deve ser usado, mas isto não é verdade. Isto é um extremismo que é em muito devido à linguagem BASIC que abusa dos gotos e não tem estruturas ricas como as do C. O comando goto pode tornar um código muito 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 muito 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>

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; 

          } 

       }

}
 
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. Faça as identações corretamente.

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 Aula

Dúvidas? De uma olhadinha em nosso FAQ

Perguntas para a lista do Curso de C