Você está visualizando atualmente Instrução de Repetição While (enquanto)

Instrução de Repetição While (enquanto)

Como vimos no post anterior, que pode ser encontrado aqui, a problemática instrução “goto” foi substituída por blocos de repetição. No post anterior vimos a instrução de repetição do tipo for (para), utilizada quando sabemos exatamente quantas vezes aquele trecho de código deve ser repetido.

Contudo, nem sempre esse valor é conhecido. Imagine que seu programa peça ao usuário para digitar um valor inteiro e maior que zero. O valor deve ser solicitado ao usuário até que ele digite um valor inteiro e maior que zero. Logo, não sabemos quantas vezes o usuário irá insistir em digitar um valor negativo ou igual a zero.

Nesta situação, podemos recorrer ao bloco de repetição “while” (enquanto). Este repetirá até que uma determinada condição seja satisfeita.

De uma boa olhada no trecho de código a seguir e identifique as linhas que você não compreende. Baseado no que você leu até aqui, tende deduzir o que faz cada linha.

#include <stdio.h>
int main(){
    int valor = 0;
    while(valor <= 0){
        printf("Digite um valor inteiro e maior que zero: ");
        scanf("%d", &valor);
    }
    printf("Valor digitado: %d\n", valor);
    return 0;
}
Programa em execução.

Entendendo seu programa C linha a linha

Na linha 1 estamos incluindo em nosso programa uma biblioteca da linguagem C. Neste caso a biblioteca stdio.h. Praticamente todos os programas em C precisam desta biblioteca pois, todas as funções e procedimentos de entrada e saída estão definidos nesta biblioteca. Por isso o nome “stdio”, i de entrada (input) e o de saída (output).

Na linha 3 temos a função principal de nosso pequeno programa. Todo programa em C precisa desta função. É por onde o nosso programa começa a ser executado. Qualquer outra função ou procedimento que precisamos deve ser chamado dentro da função main().

Na linha 5 criamos uma variável do tipo int (inteiro) para salvar o valor que será digitado pelo usuário. Esta variável é inicializada com zero pois, como na linha seguinte, linha 7, seu conteúdo é comparado com zero, se ela não for inicializada com zero e possuir lixo de memória, o teste do while pode ser falso e não executar nenhuma vez.

Lixo de memória é nome dado ao conteúdo de uma posição de memória que estava sendo utilizada por algum programa que já foi fechado. Caso uma região de memoria com lixo de algum outro programa seja reservada pelo compilador para nosso programa, pode gerar algum erro inesperado se não inicializarmos a variável com algum valor, limpando assim o que havia lá.

Na linha 7 temos a nossa instrução de repetição. Tudo que está entre as chaves, ou seja, as linhas 8 e 9, serão executadas enquanto o conteúdo da variável “valor” for menor ou igual a zero. Apenas quando este teste for falso a linha 11 será executada, imprimindo o valor digitado na tela.

Perceba que a principal diferença entre a instrução de repetição while e for é que agora nós não sabemos quantas vezes o trecho entre as chaves será repetido.

Instrução while com mais de uma comparação

As vezes pode ser necessário realizar mais de um teste para então decidir se um trecho de código deve ou não ser repetido. A instrução while suporta múltiplas comparações desde que os operadores relacionais seja utilizados adequadamente.

No exemplo a seguir, um novo valor é solicitado ao usuário enquanto o valor digitado for menor ou igual a 0 ou maior ou igual a 1000, ou seja, são válidos apenas valores entre 1 e 999.

#include <stdio.h>
int main(){
    int valor = 0;
    while(valor <= 0 || valor >= 1000){
        printf("Digite um valor inteiro e maior que zero: ");
        scanf("%d", &valor);
    }
    printf("Valor digitado: %d\n", valor);
    return 0;
}
Programa em execução.

Imagine que haja uma terceira condição, que além de excluir os números menores que 1 e maiores que 999, também desejamos excluir todos os números pares. Basta incluir esta terceira condição no while, como apresentado a seguir.

#include <stdio.h>
int main(){
    int valor = 0;
    while(valor <= 0 || valor >= 1000 || valor % 2 == 0){
        printf("Digite um valor inteiro e maior que zero: ");
        scanf("%d", &valor);
    }
    printf("Valor digitado: %d\n", valor);
    return 0;
}
Programa em execução.

Se ficou alguma dúvida, compartilhe nos comentários que faremos o possível para esclarecer. Um grande abraço, bons estudos e até o próximo.

Deixe um comentário

onze − seis =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.