Obra: Programar em C/Controle de fluxo
Nível: médio
controle de fluxo dificilmente um programa em irá executar sempre as mesmas instruções na mesma ordem do que tenha acontecido anteriormente ou do valor que foi fornecido muito comum que alguém queira que um pedaço de código só seja executado se uma certa condição for verdadeira também comum querer que um pedaço de código seja repetido várias vezes de tal maneira que simplesmente copiar código não resolveria problema ou seria trabalhoso demais para casos como esses existem as estruturas de controle de fluxo em existem várias instruções relacionadas ao controle de fluxo if que executa um bloco apenas se uma condição for verdadeira switch que executa um bloco de acordo com valor de uma expressão ou variável for que executa um bloco repetidas vezes enquanto uma condição for verdadeira executando uma instrução geralmente de incremento ou decremento de uma variável após cada execução while que executa um bloco enquanto uma condição for verdadeira do semelhante ao while mas condição avaliada após execução não antes goto que simplesmente pula para um lugar pré definido porém antes de entrar no estudo dessas estruturas você deve saber como escrever uma condição que explicamos seguir expressões de condição uma expressão de condição uma expressão normal em que quando avaliada será interpretada como verdadeira ou falsa em na verdade esse valor um valor inteiro que sendo zero significa falso sendo qualquer outro número significa verdadeiro geralmente em expressões condicionais usamos os operadores relacionais ou seja que avaliam relação entre seus dois operandos existem seis deles operador significado maior que maior ou igual menor que menor ou igual igual diferente de todos esses operadores são binários ou seja trabalham com dois valores ou operandos esses operadores sempre comparam valor da esquerda com da direita ou seja expressão significa maior que note que para saber se dois números são iguais devemos usar dois sinais de igual um erro muito comum esquecer de um deles transformando comparação numa atribuição por exemplo if que acontece aqui que variável recebe valor de modo que expressão entre parênteses também terá valor tornando condição sempre verdadeira similarmente se usássemos número zero expressão sempre seria falsa portanto sempre tome cuidado com esse tipo de comparação maneira certa de comparar com um número if também comum que combinemos condições por exemplo podemos querer que um número seja menor que ou maior que como operador ou escreveríamos seguir você vê os operadores lógicos operador significado ou or and não not algumas explicações sobre os operadores lógicos operador não unário ou seja uma operação que envolve apenas um valor que ele faz inverter valor de seu operando retorna falso se expressão for verdadeira vice versa deve se usar parênteses ao negar uma expressão por exemplo operador ou retorna verdadeiro se pelo menos um dos operandos for verdadeiro retorna falso apenas se ambos forem falsos operador retorna verdadeiro apenas se a
os for verdadeiro retorna falso apenas se ambos forem falsos operador retorna verdadeiro apenas se ambos os seus operandos forem verdadeiros observação se você quer saber se um número está entre outros dois sintaxe matemática não funcionará se você usar esse código na verdade primeiramente será avaliada expressão que poderá resultar em ou portanto expressão equivale ou que sempre verdadeiro comparação correta envolveria operador pelo fato de todo valor diferente de zero ser avaliado como verdadeiro zero como falso existem as seguintes equivalências apenas quando estas expressões são usadas como condições equivale equivale testes testes são estruturas de controle que executam certos blocos de código apenas se uma certa condição for verdadeira existem três estruturas desse tipo em if teste if avalia uma condição se ela for verdadeira executa um bloco de código sintaxe correspondente isso if condição bloco ser executado se condição for verdadeira mas também podemos especificar um bloco ser executado caso condição for falsa nesse caso escrevemos if condição bloco ser executado se condição for verdadeira else bloco ser executado se condição for falsa as chaves podem ser omitidas caso haja apenas uma instrução no bloco por exemplo if printf igual perceba que se esquecermos as chaves compilador não deverá dar nenhum erro no entanto tudo que exceder primeira instrução será executado mesmo que esteja na mesma linha no exemplo seguir frase igual seria exibida mesmo que número não fosse if printf igual podemos avaliar diversas condições com os testes if bastando para isso colocar um novo teste no bloco else também possível aninhar blocos if ou seja colocar um dentro de outro if printf maior que else if printf maior ou igual mas não maior que else if printf igual zero else printf não nulo menor que switch teste switch compara uma expressão com diversos valores que podem estar associados blocos de códigos diferentes executa bloco de código correspondente ao valor encontrado você também pode especificar um bloco que deve ser executado caso nenhum dos outros valores seja encontrado bloco default padrão em inglês switch expressão case valor instruções break case valor instruções break default instruções note que no teste switch não precisamos usar chaves em volta dos blocos menos que declaremos variáveis neles um exemplo da utilização de switch seria criação de um menu int opcao printf cadastrar cliente procurar cliente inserir pedido sair digite sua escolha scanf opcao switch opcao case break case procura_cliente break case insere_pedido break case return default printf opção inválida instrução break indica que deve se continuar execução após final do bloco switch pulando que estiver no meio se ela não fosse usada para um certo valor encontrado seriam executadas também as instruções de todos os valores abaixo dele em alguns casos podemos omitir instrução break por exemplo no exemplo acima não colocamos uma instrução break para valor zero pois quando retornamos
r exemplo no exemplo acima não colocamos uma instrução break para valor zero pois quando retornamos de uma função return bloco switch já abandonado também podemos querer que uma instrução seja executada para mais de um valor vamos supor que no nosso menu as duas primeiras opções fossem cadastrar pessoa física cadastrar pessoa jurídica tívessemos uma função que faz cadastro diferentemente dependendo do valor da variável pessoa_fisica poderíamos fazer um código assim switch opcao case pessoa física pessoa_fisica case cadastra break nesse caso para qualquer uma das duas opções seria executada função cadastra mas se selecionarmos pessoa física variável será atribuída antes operador ternário operador ternário uma alternativa abreviada da estrutura if else ele avalia uma expressão retorna um certo valor se ela for verdadeira ou outro valor se ela for falsa sua sintaxe condição valorsefalsa note que ao contrário de if ao usarmos operador condicional precisamos sempre prover tanto valor para caso de condição ser falsa quanto valor para caso de ela ser verdadeira operador condicional pode ser usado em situações como essa int horaabertura diasemana domingo printf abrimos às horas horaabertura ou seja se dia da semana for domingo variável horaabertura será definida para caso contrário será definida para outro exemplo if nummensagens printf você tem mensage nummensagens nummensagens ns neste caso programa utilizaria mensagens caso houvesse mais de uma mensagem mensagem caso houvesse apenas uma mensagem loops loops são conjuntos de instruções que devem ser executadas repetidas vezes enquanto uma condição for verdadeira em há tipos de loops while do while for while loop while testa uma condição se ela for verdadeira bloco correspondente executado teste repetido se for falsa execução continua logo após bloco sintaxe de while while condição por exemplo while este código seria executado até que fosse igual se fosse igual ou maior que nada seria executado por exemplo para while loops infinitos você pode fazer loops infinitos com while usando uma condição que sempre verdadeira como ou simplesmente que como qualquer valor não nulo considerado verdadeiro while você pode sair de um loop infinito ou não com instrução break que você já viu no teste switch será explicada mais abaixo do while loop do while exatamente igual ao while exceto por um aspecto condição testada depois do bloco que significa que bloco executado pelo menos uma vez estrutura do while executa bloco testa condição se esta for verdadeira volta para bloco de código sua sintaxe do while condição note que ao contrário das outras estruturas de controle necessário colocar um ponto vírgula após condição do printf while um exemplo de utilização de do while em um menu pediríamos que usuário escolhesse uma opção até que ele escolhesse uma opção válida include int main int do printf escolha fruta pelo número printf mamão printf abacaxi printf laranja scanf while switch case printf você escolheu mamão break case
f mamão printf abacaxi printf laranja scanf while switch case printf você escolheu mamão break case printf você escolheu abacaxi break case printf você escolheu laranja break return for loop for nada mais que uma abreviação do loop while que permite que alguma inicialização seja feita antes do loop que um incremento ou alguma outra ação seja feita após cada execução sem incluir código dentro do bloco sua forma geral diagrama de fluxo de dados da estrutura para atribuição inicial condição de parada bloco de código incremento do passo for inicialização condição incremento instruções equivale inicialização while condição instruções incremento um exemplo do uso de for for nesse exemplo primeiro definimos valor de como depois código repetido enquanto for menor que dez incrementando em uma unidade valor de após cada execução do código analisando essas condições você podera perceber que código será executado nove vezes na primeira execução temos após nona execução igual portanto bloco não será mais repetido também podemos dar mais de uma instrução de inicialização ou de incremento separadas por vírgula além de poder usar naturalmente condições compostas com uso dos operadores lógicos for nesse exemplo são inicializados com valor cada loop valor de incrementado em uma unidade de dobrado isso ocorre enquanto for menor que razão entre for menor que se você construir uma tabela com os valores de cada variável cada loop ou colocar algum contador dentro do loop verá que ocorrem oito execuções assim como while loop for testa condição se condição for verdadeira ele executa bloco faz incremento volta testar condição ele repete essas operações até que condição seja falsa podemos omitir qualquer um dos elementos do for se desejarmos se omitirmos inicialização incremento comportamento será exatamente igual ao de while se omitirmos condição ficaremos com um loop infinito for inicialização incremento podemos também omitir bloco de código se nos interessar apenas fazer incrementos ou se quisermos esperar por alguma situação que estabelecida por uma função externa nesse caso usamos ponto vírgula após os parênteses de for isso também valido para loop while for inicialização condição incremento while condição por exemplo suponha que temos uma biblioteca gráfica que tem uma função chamada graphicsready que indica se podemos executar operações gráficas este código executaria função repetidas vezes até que ela retornasse verdadeiro então pudéssemos continuar com programa while graphicsready break continue você já viu break sendo usado para sair do teste switch no entanto ele funciona também nos loops while do for nos três casos ele sai do último loop iniciado mesmo que haja mais de um por exemplo while if break break sempre faz com que execução do programa continue na primeira instrução seguinte ao loop ou bloco instrução continue parecida com break porém ao executá la saltamos para próxima iteração loop ao invés de terminá lo usar continue equivale chegar ao final do bloco
os para próxima iteração loop ao invés de terminá lo usar continue equivale chegar ao final do bloco os incrementos são realizados se estivermos em um loop for condição reavaliada qualquer que seja loop atual include int main int opcao while opcao printf escolha uma opção entre scanf opcao se opção for inválida volta ao início do loop if opcao opcao primeira opcao break case printf segunda opcao break case printf terceira opcao break case printf quarta opcao break case printf abandonando break return esse exemplo recebe uma opção do usuário se ele digitar uma opção inválida ou seja não for um número de instrução continue voltará ao começo do loop programa pedirá novamente entrada do usuário se ele digitar uma opção válida programa seguirá normalmente saltos incondicionais goto goto uma instrução que salta para um local específico no programa esse local identificado por um rótulo sintaxe da instrução goto goto nome_do_rótulo os nomes de rótulo são identificadores sufixados por dois pontos no começo de uma linha podendo ser precedidos por espaços por exemplo nome_do_rótulo goto nome_do_rótulo muitos programadores evitam usar goto pois maioria dos saltos pode ser feita de maneira mais clara com outras estruturas da linguagem na maioria das aplicações usuais pode se substituir goto por testes loops chamadas de funções terminando programa programa pode ser terminado imediatamente usando função exit void exit int para utilizá la deve se colocar um include para arquivo de cabeçalho stdlib esta função aborta execução do programa pode ser chamada de qualquer ponto no programa faz com que programa termine retorne para sistema operacional convenção mais usada que um programa retorne zero no caso de um término normal retorne um número não nulo no caso de ter ocorrido um problema include include para função exit int main void file fp fp fopen exemplo bin wb if fp printf erro na abertura do arquivo fim de programa exit return en programming control de programmierung