Este capítulo trata das várias instruções do C utilizadas na construção de ciclos ou execução repetida (e controlada) de outras instruções.
A instrução while é semelhante à que outras linguagens possuem. No entanto a utilização de uma expressão genérica como controle pode abrir novas possibilidades. A sintaxe geral da instrução while é:
while (expressão)
instrução;
Um exemplo simples:
int x=3;
void main(void)
{
while (x > 0) {
printf("x = %d\n", x);
x--;
}
}
escreve no vídeo ...
x = 3
x = 2
x = 1
Uma vez que a instrução while pode receber uma expressão geral em vez de apenas uma condição (o valor da expressão é interpretada como TRUE se for diferente de 0, e como FALSE se for igual a 0), as instruções seguintes são todas legais:
while (x--);
while (x = x + 1);
while (x += 5);
Usando qualquer das expressões mostradas, estas são avaliadas sucessivamente até atingirem o valor 0 (FALSE).
Outros exemplos:
while (x++ != 10);
while ((ch = getchar()) != 'q')
putchar(ch);
O primeiro exemplo leva i
até 10. O segundo usa as funções standard do C
getchar() e putchar()
(declaradas em stdio.h) que lêem e escrevem um carácter
respectivamente do teclado e para o vídeo. O ciclo while
lê caracteres do teclado e mostra no vídeo até
que o usuário entre um carácter 'q'.
A instrução do-while testa a expressão que dela faz parte depois de executar as instruções do ciclo e continua enquanto se mantiver em TRUE. O ciclo é executado pelo menos 1 vez. A sua sintaxe é:
do
instrução;
while (expressão);
O seguinte código
int x = 3;
void main(void)
{
do
printf("x = %d\n", x--);
while (x > 0);
}
escreve ...
x = 3
x = 2
x = 1
A sintaxe da instrução for é diferente do habitual para outras linguagens. Uma instrução for é então definida como:
for (expressão1; expressão2; expressão3)
instrução;
A expressão1 é o inicializador, a expressão2 constitui o teste de terminação, e a expressão3 é o modificador (é executada em cada ciclo e pode fazer mais do que um simples incremento ou decremento). A instrução for é equivalente a um ciclo while com a seguinte construção:
expressão1;
while (expressão2) {
instrução;
expressão3;
}
Por exemplo, o seguinte código
int x;
void main(void)
{
for (x=3; x>0; x--)
printf("x = %d\n", x);
}
escreve no vídeo ...
x = 3
x = 2
x = 1
As próximas instruções for são todas legais:
for (x = 0; x <= 9 && x != 3; x++);
for (x = 0, y = 4; x <= 3 && y < 9; x++, y += 2);
for (x = 0, y = 4, z = 1000; z; z /= 10);
Reparar no uso do operador ,
para executar múltiplas acções. No terceiro
ciclo, a execução continua até que z
se torne 0 (FALSE).
As instruções break e continue permitem-nos controlar melhor a forma de execução dos ciclos:
break - termina imediatamente a execução de um ciclo ou da instrução switch
continue - salta imediatamente para a avaliação da expressão de controle do ciclo
No exemplo seguinte pretende-se ler uma série de inteiros do teclado e fazer qualquer coisa com eles. No entanto se o valor lido for 0 terminamos a leitura, se o valor for negativo escrevemos uma mensagem de erro e terminamos o ciclo, e se for maior do que 100 ignoramos esse valor e passamos à leitura do seguinte.
while (scanf("%d", &value) && value != 0) {
if (value < 0) {
printf("Valor ilegal\n");
break;
}
if (value > 100)
continue;
...;
/* processar value */
...;
}
A função scanf()
lê valores do teclado e coloca-os em variáveis. Retorna
o número de caracteres lidos se tiver sucesso e 0 no caso
contrário. Assim, se houver uma leitura, ela retorna um valor
diferente de 0, que é interpretado como TRUE.
[REV 3/2001]