Página 1 de 2

duvida sobre do while no clipper 5.3

Enviado: 24 Nov 2007 21:55
por elias
Quando faço um do while após dar o EXIT o programa aborta... porque esta acontendo isso??

GBoxdois(270,350,610,460,"Deseja Incluir Premio ? ",;
"verda12b.fnt",15,5,1,,0,12)
aItemMenu:= {"NÆo","Sim"} // {"Sim","NÆo"}
aItemIcon:= {"pbok.bmp","pbcanc.bmp"} // {"pbok.bmp","pbcanc.bmp"}
aItemMess:= {" "," "}
OP17:= GMenuHo(26,45,0, ,aItemMenu,aItemMess, ,aItemIcon, ,12)


IF OP17 = 1

TEMPRE='N'
REST SCREEN FROM T45
EXIT // >>>>> AQUI ABORTA O EXECUTAVEL

ELSEIF OP17 = 2

TEMPRE='S'
REST SCREEN FROM T45
...
...
...

Enviado: 24 Nov 2007 22:47
por clodoaldomonteiro
Elias!
Você já tentou colocar Return no lugar do exit?

Enviado: 25 Nov 2007 09:02
por Eolo
O que o EXIT faz é forçar a saída antecipada de um DO WHILE ou FOR/NEXT. Se depois do ENDDO ou NEXT não houver mais nada, óbvio que o comando volta pro SO.

O RETURN termina a execução da rotina que está sendo executada e volta o comando pra rotina que a chamou. Se não há essa rotina anterior, o comando volta pro SO.

Enviado: 25 Nov 2007 13:42
por Augusto
Pessoal...

O comando EXIT tem a função de sair de DO WHILE ou FOR NEXT e o codigo que parceiro colocou é um IF ESLSEIF ENDIF(???)

Importante não confundir as ações:
EXIT ou LOOP -> DO WHILE/ENDDO
EXIT -> FOR/NEXT
RETURN -> IF/ENDIF

Aparentemente o programa dele está abortando prq o EXIT não se enconta dentro de uma das opções citadas acima... Creio que o correto no caso seria um RETURN

Enviado: 25 Nov 2007 13:45
por Maligno
LOOP para FOR/NEXT também.

Enviado: 25 Nov 2007 13:59
por Augusto
Maligno escreveu:LOOP para FOR/NEXT também.
Obrigado pelo apoio ...
Se vc não fez nenhuma outra resalva, devo concluir que estou certo no post anterior...

Enviado: 25 Nov 2007 14:39
por Eolo
Aparentemente o programa dele está abortando prq o EXIT não se enconta dentro de uma das opções citadas acima...
Augusto, não é isso. Se vc colocar um EXIT fora de um DO WHILE ou FOR/NEXT, vc não consegue nem compilar. Dá Erro C2011. Como o Elias disse que o "programa aborta", então ele foi compilado e linkado.
Creio que o correto no caso seria um RETURN
O RETURN faz abandonar a rotina atual (ou o programa). E o que o Elias quer é o contrário!... :-)

Enviado: 25 Nov 2007 15:31
por Augusto
Tenho minhas dúvidas quanto a sua afirmativa, acredito que passaria sim na linkedição. Vc testou ?? Tem conhecimento de causa ?? hehe
Mas o fato é que ele não está usando um DO WHILE e sim um IF logo o EXIT não procede e com certeza o ERRO está aí...

Enviado: 25 Nov 2007 15:47
por Eolo
Sim, testei. Não passa nem na compilação, muito menos na linkedição.

Se existe um EXIT e o programa está rodando, é porque esse EXIT está DENTRO de um DO WHILE ou FOR/NEXT.

O Elias está mostrando só um IF/ENDIF (onde está abortando), mas este pedaço deve estar dentro de outra estrutura (eu acredito que um DO WHILE).

Enviado: 25 Nov 2007 16:07
por Augusto
Bem... o problema é que a gente está aqui discutindo e tentando achar uma solução pro cara e ele nem se manifesta...

Nesse caso... "TE LARGUEI" !!!

Enviado: 25 Nov 2007 17:40
por Maligno
Augusto escreveu:Se vc não fez nenhuma outra resalva, devo concluir que estou certo no post anterior...
Nem vi o resto. Hoje estou funcionando só a meia carga. Ou menos. :)

Essa questão do EXIT é como o Eolo falou. Não tinha me ligado, mas realmente dá erro de compilação.

Agora, o código do Elias está meio esquisito. Mas vamos pela lógica: EXIT é um comando simples. É impossível um programa normal abortar por causa dele. Portanto, se o programa realmente aborta nele, só uma coisa vai resolver o sinistro: compilar em outra máquina. A não ser que ele tenha nos passado dados errados. :)

EXIT NO DO WHILE

Enviado: 26 Nov 2007 14:15
por elias
Pessoal...
existe um do while.... e o exit é exatamente para sair deste do while.. como sempre fiz no clipper.. como estou usando o clipper 5.3.. o executavel... compilado e linkeditado.. aborta... será que as rotinas do do while devem ser feitas em um prg a parte??? .. existem dois do while dentro de um mesmo prg.. será isso!!!!!

elias

Enviado: 26 Nov 2007 14:30
por elias
PESSOAL.. PRIMEIRAMENTE AGRADEÇO MUITO A ATENÇÃO DE TODOS... TENTEI TODAS AS ALTERNATIVAS CITADAS... E AINDA ASSIM ABORTA... VAMOS LÁ...
EXITE UM PRG MENU.. QUE CHAMA UM PRG PREMIO... NESTE PRG PREMIO EXISTE UMA PERGUNTA SE QUERO COLOCAR PREMIO.. ENTÃO COLOQUEI UM DO WHILE .. SE QUISER PREMIO.. ENTRA-SE COM OS DADOS DO PREMIO E LOGO EM SEGUIDA É FEITO UM IF.. SE ESTIVER CORRETO OS DADOS.. EXIT PARA SAIR DO DO WHILE... E QUANDO DIGO QUE OS DADOS ESTÃO OK.. ELE ABORTA O EXECUTAVEL EXATAMENTE NESTE EXIT.. ANDEI PESQUISANDO O CLIPPER 5.3 E PARECE-ME QUE OS DO WHILE TEM QUE SER FEITOS EM UM PRG A PARTE.. PROCEDE ISSO?? (DESCULPE-ME NÃO TER RESPONDIDO A TODOS ANTES.. É QUE EU NÃO ESTAVA EM CASA) ABRAÇOS A TODOS

ERRO NO DO WHILE

Enviado: 26 Nov 2007 14:36
por elias
PRIMEIRAMENTE AGRADEÇO MUITO A ATENÇÃO DE TODOS... TENTEI TODAS AS ALTERNATIVAS CITADAS... E AINDA ASSIM ABORTA... VAMOS LÁ...
EXITE UM PRG MENU.. QUE CHAMA UM PRG PREMIO... NESTE PRG PREMIO EXISTE UMA PERGUNTA SE QUERO COLOCAR PREMIO.. ENTÃO COLOQUEI UM DO WHILE .. SE QUISER PREMIO.. ENTRA-SE COM OS DADOS DO PREMIO E LOGO EM SEGUIDA É FEITO UM IF.. SE ESTIVER CORRETO OS DADOS.. EXIT PARA SAIR DO DO WHILE... E QUANDO DIGO QUE OS DADOS ESTÃO OK.. ELE ABORTA O EXECUTAVEL EXATAMENTE NESTE EXIT.. ANDEI PESQUISANDO O CLIPPER 5.3 E PARECE-ME QUE OS DO WHILE TEM QUE SER FEITOS EM UM PRG A PARTE.. PROCEDE ISSO?? (DESCULPE-ME NÃO TER RESPONDIDO A TODOS ANTES.. É QUE EU NÃO ESTAVA EM CASA) ABRAÇOS

Enviado: 26 Nov 2007 14:45
por Augusto
elias escreveu:.. ANDEI PESQUISANDO O CLIPPER 5.3 E PARECE-ME QUE OS DO WHILE TEM QUE SER FEITOS EM UM PRG A PARTE.. PROCEDE ISSO??
Parceiro... essa afirmativa não procede. Todos os meus sistemas são em 5.3/Blinker6 e praticamente todos começam com um "DO WHILE .T." e dentro deles tem um montão de outros DO WHILE, IFs, FOR/NEXT etc, inclusive chamando "procedures" e retornando...
Pelo que vc está colocando, acredito que seja somente um erro de algorítimo... Que tal vc disponibilizar o código todo para que possamos analisar melhor e te ajudar ??