logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom: Dlaczego instrukcja Else nie działa w złożonym warunku?

robiw 03 Mar 2008 12:45 1190 4
REKLAMA
  • #1 4868640
    robiw
    Poziom 26  
    Posty: 2032
    Pomógł: 25
    Ocena: 133
    Witam.
    Znalazłem pewien "kwiatek" w składni Bascoma (pewnie kolejny):

    Poniższe DZIAŁA

    
     If Jakaś zmienna = 1 Then
    
      Select Case Inna_zmienna
    
       Case 2: 
                If Kolejna <> 2 Then
                 'Coś tam robi
                Else
                  'Testowanie bitu jakiejś zmiennej
                  If Ostatnia_zmienna.7 = 1 Then Display On
                  If Ostatnia_zmienna.7 = 0 Then Display Off          
                End If
    
       Case 3: 'Coś tam robi
      End Select
    
     End if
    


    A to NIE tzn. nie wykonuje instrukcji Else

    
     If Jakaś zmienna = 1 Then
    
      Select Case Inna_zmienna
    
       Case 2: 
                If Kolejna <> 2 Then
                 'Coś tam robi
                Else
                  'Testowanie bitu jakiejś zmiennej
                  If Ostatnia_zmienna.7 = 1 Then Display On Else  Display Off
                End If
    
       Case 3: 'Coś tam robi
      End Select
    
     End if
    


    Dzielenie Warunku Else If na linie (z End if) nie zmienia postaci rzeczy. Nie można także używać Deflcdchar ze zmiennymi. Pozdrawiam... robiw
  • REKLAMA
  • #2 4868680
    lelekx
    Poziom 30  
    Posty: 1220
    Pomógł: 158
    Ocena: 90
    Sprawdź w pomocy Bascoma, ile może być zagnieżdżonych wyrażeń warunkowych.
    Ja tu widzę następujące:
    1. If Jakaś zmienna = 1 Then
    2. Select Case Inna_zmienna
    3. If Kolejna <> 2 Then
    4. Else [podejrzewam, że Bascom traktuje Else jako kolejny poziom zagnieżdżenia]
    5. If Ostatnia_zmienna.7 = 1 Then
    6. Else Display Off [uwaga do Else jak wyżej]

    I prawdopodobnie Bascom obsługuje 5 poziomów. Polecenie Display Off może być na 6 poziomie, co może nie działać. Tylko aż dziwi, że kompilator nie zasygnalizował problemu.
  • REKLAMA
  • #3 4868695
    robiw
    Poziom 26  
    Posty: 2032
    Pomógł: 25
    Ocena: 133
    Info o ograniczeniach było w wersji 8051. W AVR ja go nie znajduję. Generalnie rzadko stosuję Case, gdyż wiele instrukcji IF..THEN daje znacznie mniejszy kod wynikowy. W Helpie nie piszą też, że Deflcdchar działa tylko ze stałymi :-(...robiw
  • REKLAMA
  • #4 4868846
    remzibi
    Poziom 24  
    Posty: 1394
    Pomógł: 34
    Ocena: 889
    Napisz to tak :
    
    If Jakaś zmienna = 1 Then 
    
      Select Case Inna_zmienna 
    
       Case 2: 
                If Kolejna <> 2 Then 
                 'Coś tam robi 
                Else 
                  'Testowanie bitu jakiejś zmiennej 
                  If Ostatnia_zmienna.7 = 1 Then
                        Display On 
                      Else 
                       Display Off 
                   End if
                End If 
    
       Case 3: 'Coś tam robi 
      End Select 
    
     End if 
    
    


    i zadziala
REKLAMA