Apostila C da UFMG - Universidade do Minho
Apostila C da UFMG - Universidade do Minho
Apostila C da UFMG - Universidade do Minho
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
eak;<br />
case 2:<br />
printf("\n --> Segun<strong>da</strong> opcao..");<br />
break;<br />
case 3:<br />
printf("\n --> Terceira opcao..");<br />
break;<br />
case 4:<br />
printf("\n --> Quarta opcao..");<br />
break;<br />
case 5:<br />
printf("\n --> Aban<strong>do</strong>nan<strong>do</strong>..");<br />
break;<br />
}<br />
}<br />
}<br />
O programa acima ilustra uma simples e útil aplicação para o continue. Ele recebe uma opção <strong>do</strong> usuario. Se esta<br />
opção for inváli<strong>da</strong>, o continue faz com que o fluxo seja desvia<strong>do</strong> de volta ao início <strong>do</strong> loop. Caso a opção escolhi<strong>da</strong><br />
seja váli<strong>da</strong> o programa segue normalmente.<br />
4.8 - O Coman<strong>do</strong> goto<br />
O goto é o último coman<strong>do</strong> de controle de fluxo. Ele pertence a uma classe à parte: a <strong>do</strong>s coman<strong>do</strong>s de salto<br />
incondicional. O goto realiza um salto para um local especifica<strong>do</strong>. Este local é determina<strong>do</strong> por um rótulo. Um rótulo,<br />
na linguagem C, é uma marca no programa. Você dá o nome que quiser a esta marca. Podemos tentar escrever uma<br />
forma geral:<br />
nome_<strong>do</strong>_rótulo:<br />
....<br />
goto nome_<strong>do</strong>_rótulo;<br />
....<br />
Devemos declarar o nome <strong>do</strong> rótulo na posição para a qual vamos <strong>da</strong>r o salto segui<strong>do</strong> de :. O goto pode saltar para um<br />
rótulo que esteja mais à frente ou para trás no programa. Uma observação importante é que o rótulo e o goto devem<br />
estar dentro <strong>da</strong> mesma função . Como exemplo <strong>do</strong> uso <strong>do</strong> goto vamos reescrever o equivalente ao coman<strong>do</strong> for<br />
apresenta<strong>do</strong> na seção equivalente ao mesmo:<br />
inicialização;<br />
início_<strong>do</strong>_loop:<br />
if (condição)<br />
{<br />
declaração;<br />
incremento;<br />
goto início_<strong>do</strong>_loop;<br />
}<br />
O coman<strong>do</strong> goto deve ser utliza<strong>do</strong> com parcimônia, pois o abuso no seu uso tende a tornar o código confuso. O goto<br />
não é um coman<strong>do</strong> necessário, poden<strong>do</strong> sempre ser substituí<strong>do</strong> por outras estruturas de controle. Puristas <strong>da</strong><br />
programação estrutura<strong>da</strong> recomen<strong>da</strong>m que o goto nunca seja usa<strong>do</strong>. Porém, em algumas situações muito específicas o<br />
coman<strong>do</strong> goto pode tornar um código mais fácil de se entender se ele for bem emprega<strong>do</strong>. Um caso em que ele pode<br />
ser útil é quan<strong>do</strong> temos vários loops e ifs aninha<strong>do</strong>s e se queira, por algum motivo, sair destes loops e ifs to<strong>do</strong>s de<br />
uma vez. Neste caso um goto resolve o problema mais elegantemente que vários breaks, sem contar que os breaks<br />
exigiriam muito mais testes. Ou seja, neste caso o goto é mais elegante e mais rápi<strong>do</strong>. Mas não abuse!!!<br />
O exemplo <strong>da</strong> página anterior pode ser reescrito usan<strong>do</strong>-se o goto:<br />
#include <br />
main()<br />
{<br />
int opcao;<br />
while (opcao != 5)<br />
{<br />
REFAZ: printf("\n\n Escolha uma opcao entre 1 e 5: ");<br />
scanf("%d", &opcao);<br />
Pág. 31