Página 1 de 1

if statement não funciona direito

Enviado: 16 Fev 2021 14:26
por tchadrack
Estou tendo problema no seguinte código:

Código: Selecionar todos

DO WHILE (!Eof())
       TTT := TRIM(F2->MENUPRI)  //criei esta variável para facilitar checar o conteúdo dela durante o debug
        IF (TTT!="")  //mesmo quando o conteúdo de TTT é diferente de "" o código abaixo não é executado
          alert("executado")
        ENDIF
       SKIP
ENDDO
o código dentro da cláusula IF acima não é executado, mesmo que eu inverta o sinal de "diferente !=" para "igual ==)
não é executado quando TTT != "", já alterei até o nome da variável, só é executado se eu colocar um conteúdo dentro de "", por exemplo TTT !- "c"
já tentei usar <> como sinal para diferente. já tentei usar o hb34 ou a versão 3.2.

a versão do compilador mingw:
gcc (Rev2, Built by MSYS2 project) 7.3.0

tentei compilar usando
Harbour 3.2.0dev (r2011030937) e o
Harbour 3.4.0dev () (2020-11-14 01:40)

mas os dois apresentaram o mesmo problema

PATH=c:\hb34\bin;c:\mingw\bin;c:\bcc\bin;c:\hb34\;c:\hb34\bin\win\mingw ao compilar usando a versão 3.4
PATH=c:\hb32\bin;c:\mingw\bin;c:\bcc\bin;c:\hb32\;c:\hb32\bin\win\mingw ao compilar usando a versão 3.2

algum dos colegas saberia me dizer porque isto está acontecendo?

if statement não funciona direito

Enviado: 16 Fev 2021 14:58
por microvolution
tchadrack escreveu:IF (TTT!="")
experimente assim:

Código: Selecionar todos

IF TTT<>""
ou

Código: Selecionar todos

IF TTT<>NIL
manda ver e posta os resultados, pra nós por favor!

if statement não funciona direito

Enviado: 16 Fev 2021 15:01
por LDOSISTEMAS
Boa tarde
IF (TTT!="") //nesse ponto em vez de (TTT!="") não poderia ser !(TTT="")

if statement não funciona direito

Enviado: 16 Fev 2021 16:32
por alxsts
Olá!

Situação estranha esta... mas certamente não é problema no Harbour...

Código: Selecionar todos

// A variável TTT foi declarada como LOCAL?
// Será que existe alguma PRIVATE ou PUBLIC com nome de TTT?
// Trim() remove apenas espaços à direita. Pode ter sobrado alguma coisa...
// Use Alltrim( que remove espaços à esquerda e à direita...)

DO WHILE (!Eof())  // em que área é feito este loop? F2 ?
   TTT := ALLTRIM( F2->MENUPRI )
   IF ! Empty( TTT )
      Alert("executado")
   ENDIF
   SKIP  // em que área é feito este skip? F2 ?
ENDDO

// ou

DO WHILE F2->( !Eof() )
   IF ! Empty( ALLTRIM( F2->MENUPRI )
      alert("executado")
   ENDIF
   F2->( DBSKIP() )
ENDDO

if statement não funciona direito

Enviado: 16 Fev 2021 17:54
por JoséQuintas
Problema tradicional.

Ao invés de

IF (TTT!="")

utilize

IF ! TTT == "" ou IF ! Empty( TTT )

Explicação: ao comparar string, é usado o tamanho da menor e os outros caracteres são desprezados.

= compara pelo menor tamanho
!= compara pelo menor tamanho, é o contrário de =
== compara exatamente igual
! x == y compara não exatamente igual, é o contrário de ==

Código: Selecionar todos

PROCEDURE Main

   ? "ABA" = ""       // .T. considera igual
   ? "ABA" != ""      // .F. considera igual
   ? "ABA" == ""      // .F. considera diferente
   ? ! "ABA" == ""    // .T. considera diferente
   Inkey(0)

   RETURN