O loop do... while


A estrutura do laço do... while é muito parecida com a estrutura do laço while. A diferença básica entre elas consiste no fato de, enquanto o teste condicional no comando while é realizado no início do loop (antes das instruções), no laço do... while o teste é realizado no fim do loop (após as instruções).

Dessa forma, o programador garante que pelo menos uma vez as instruções contidas no corpo do laço serão processadas, mesmo que a condição seja falsa.


eis a sintaxe:


do

{

...

}

while(condição)


O exemplo a seguir leva um Button e um Label no Form. Quando o usuário dá um clique no Button, uma mensagem é exibida no Label e, após sete segundos (7000 milisegundos), o programa é encerrado.


//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

void __fastcall Esperar(int Miliseg);

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Caption = "Aguarde... Após sete segundos o programa será fechado";
Esperar(7000); // tempo que o programa aguardará até ser encerrado
Close(); // encerra o programa
}
//---------------------------------------------------------------------------

void __fastcall Esperar (int Miliseg)
{
TDateTime Hora; // declara variável da classe TDateTime
unsigned short Hor, Min, Seg, Miles; // declara vairiáveis 
int Tempo;
Hora = Time(); // atribui a hora do sistema à variável Hora

/*todas as instruções abaixo serão executadas ao menos uma vez, 
(independente de a condição avaliada ser verdadeira) */
do // início do loop
   {

      /*DecodeTime() suspende um objeto TdateTime 
      em horas, minutos, segundos e milisegundos*/
      (Time() - Hora).DecodeTime (&Hor, &Min, &Seg, &Miles);

      /*incrementa a variável Tempo*/
      Tempo = (Min * 60000) + (Seg * 1000) + Miles;

      /*interrompe a execução da aplicação possibilitando 
      ao Windows processar determinadas mensagens*/
      Application->ProcessMessages();
   }
/* o loop será executado enquanto Tempo for menor que Miliseg */
while (Tempo < Miliseg);
}
//---------------------------------------------------------------------------

anterior

índice

próxima


HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO