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ń