Autor: Dondu
Kurs języka C: Spis treści
Instrukcja if( ) pozwala na sprawdzenie spełnienia się jakiegoś warunku, a w połączeniu z else także niespełnienia warunku. W ten sposób program może realizować różne funkcjonalności w zależności od wyniku sprawdzania warunku. Warunkiem może być definicja, stała, zmienna lub jakieś wyrażenie.
Podstawowe formy wykorzystania instrukcji if(...) ... else ...
if ( warunek ) jakis_kod; //lub if ( warunek ) jakis_kod; else inny_kod;
Przykład najprostszej formy instrukcji if( ).
Przykład 1 (w kompilatorze)
if ( warunek ) a++; //zwiększ zmienną a o jeden, gdy warunek spełniony
Instrukcja else rozdziela sterowanie if( ) na drugi człon wykonywany w przypadku, gdy warunek nie jest spełniony. W ten sposób przejście programu przez if( ) zawsze spowoduje wykonanie jednego z dwóch fragmentów if( ). Poniżej różne fromy zapisu if( ) else.
Przykład 2 (w kompilatorze)
//--- WERSJA 1 ----------- if ( warunek ) a++; //zwiększ zmienną a o jeden, gdy warunek spełniony else a--; //w przeciwnym wypadku zmniejsz zmienną o jeden //--- WERSJA 2 ----------- //dla zwiększenia czytelności kodu można tak if ( warunek ) a++; else a--; //--- WERSJA 3 ----------- //można zapisać także w wersji jednolinijkowej if ( warunek ) a++; else a--;
if( ) z blokami { }
Ponieważ często kod wykonywany zależnie od wyniku if( ) ma więcej niż jedną linię, stąd możesz używać znaczników bloku { } na różne sposoby.
Przykład 3 (w kompilatorze)
//--- WERSJA 1 ----------- if ( warunek ){ //gdy warunek spełniony a++; b = b + 100; }else //gdy warunek nie jest spełniony c = c - 50; //--- WERSJA 2 ----------- if ( warunek ){ //gdy warunek spełniony a++; b = b + 100; }else{ //gdy warunek nie jest spełniony c = c - 50; } //--- WERSJA 3 ----------- if ( warunek ) //gdy warunek spełniony a++; else{ //gdy warunek nie jest spełniony b = b + 100; c = c - 50; }
Położenie nawiasów może być też takie:
if ( warunek ) { //gdy warunek spełniony a++; } else { //gdy warunek nie jest spełniony a--; }Wszystko zależy od indywidualnych przyzwyczajeń.
Zagnieżdżanie
Możliwe jest dowolnie skomplikowane zagnieżdżanie if'ów. Jednak trzeba bardzo uważnie pisać i testować kod.
Przykład 4 (w kompilatorze)
//--- PRZYKŁAD A ----------- if ( warunek_1 ) if( warunek_2 ) //warunek_2 jest badany tylko, gdy warunek_1 jest spełniony a++; //zwiększ zmienną a o jeden, gdy oba warunki spełnione else a--; //zmniejsz zmienną a o jeden, gdy warunek_1 nie jest spełniony //--- PRZYKŁAD B ----------- if ( warunek_1 ) { //gdy warunek_1 jest spełniony if( warunek_2 ) b+=10; //zwiększ zmienną a o 10, oba warunki spełnione else b-=10; //zmniejsz zmienną a o 10, gdy warunek_2 nie jest spełniony } //--- PRZYKŁAD C ----------- if ( warunek_1 ) { //warunek_1 jest spełniony, badamy warunek_2 if( warunek_2 ) c+=25; //zwiększ zmienną a o 25, gdy warunek_2 jest spełniony } else //warunek_1 nie jest spełniony c-=25; //zmniejsz zmienną o 25 gdy warunek_1 nie jest spełniony
else if()
Istnieje możliwość łączenia instrukcji if( ) w łańcuch wzajemnie powiązanych instrukcji z różnymi warunkami. W ten sposób uzyskuje się możliwość wybrania jednego z kliku wzajemnie powiązanych skomplikowanych zależności.
Przykład 5 (w kompilatorze)
if ( warunek1 ){ //warunek1 jest spełniony //pozostałe warunki nie są sprawdzane }else if(warunek2){ //warunek1 nie jest spełniony //warunek2 jest spełniony //warunek3 nie jest sprawdzany }else if(warunek3){ //warunek1 oraz warunek2 nie są spełnione //warunek3 jest spełniony }else{ //żaden warunek nie jest spełniony }
Powyższy przykład w szczególności warto poćwiczyć w kompilatorze CManiak.
Kurs języka C: Spis treści
19
Dopiero tutaj znalazłem dobrze napisane wyjaśnienie jak stosować łańcuch "else if".
OdpowiedzUsuńNa tym blogu dostaje to czego potrzebuje:)
Pozdrawiam, Tomq z elektrody.
Nie to, że czepiam się szczegółów, ale po prostu dobrze jak wszystko by tu było idealne:P Mianowicie w 4 przykładzie w przykładzie B i C w komentarzach jest "zwiększ zmienną a", no a wiadomo, że powinno być odpowiednio dla przykładu B "zwiększ zmienną b" oraz dla przykładu C "zwiększ zmienną c" :P
OdpowiedzUsuńMam pewien dylemat.
OdpowiedzUsuńCzy lepiej stosować zagnieżdżanie if czy (złożony warunek), np
if(a==5 && b==4){
kod;
}
czy
if(a==5){
if(b==4){
kod;
}
}
Jeśli tylko takie warunki, to zdecydowanie ten pierwszy. Jeśli bardziej złożone warunki, to ten drugi. Generalnie kompilator i tak zrobi z tego kod maszynowy odpowiednio zoptymalizowany w obu przypadkach.
Usuń