14.03.2015 Views

Apostila C da UFMG - Universidade do Minho

Apostila C da UFMG - Universidade do Minho

Apostila C da UFMG - Universidade do Minho

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!