Programmering i ANSI-C/Villkorssatser
Programmering i ANSI-C |
Villkorssatser
redigeraAtt Ställa villkor
redigeraDet vanligaste sättet att ställa ett villkor i ANSI-C är med nyckelordet if, (om). Funktionen testar om ett uttryck är sant eller falskt med olika jämförelseoperatorer. Se teckenuppsättning för en lista på dessa operatorer. Men villkoret kan även vara värdet på en variabel eller ett returvärde från ett funktionsanrop. Ett uttryck är falskt om resultatet av jämförelsen, värdet på variabeln eller returbeloppet är lika med noll (0). Alla övriga värden betraktas som sanna uttryck.
En god regel är att alltid använda '{' och '}' tecken i alla villkorssatser. Det är visserligen inte nödvändigt, men om man lägger till en rad i t.ex if-satsen vid ett senare tillfälle så är allt på plats och man behöver inte lägga till dem senare. Det är också en risk, att man lägger till en rad och att den kommer att evalueras varje gång. T.ex:
y = 0; if (x) { y = 1; y += 7; }
och
y = 0; if (x) y = 1; y +=7; /* Evalueras alltid oavsett om x är större än noll eller inte */
kommer i första fallet allt leda till att 'y' är 8 om 'x' är större än noll, annars noll. Men, i andra fallet kommer 'y' alltid att vara minst 7, och kanske även 8, om 'x' är större än noll.
Följande lilla programexempel kan användas för att testa om ett inmatat värde anses vara sant eller falskt:
/* Testa om ett värde är sant eller falskt */ #include <stdio.h> int main( void ) { int x; printf ( "\nAnge ett värde ? " ); scanf( "%i", &x ); if ( x ) { printf ( "Det är sant \n" ); } else { printf ( "Det är falskt \n" ); } return ( 0 ); }
Exempel
redigera
/* "Gissa ett tal", ett exempel på användandet av villkorssatser */ 01 #include <stdio.h> 01 #include <stdlib.h> 01 #include <time.h> 02 #define RND ( ( float ) rand ( ) / RAND_MAX ) 03 int main( void ) 04 { 05 int tal; 05 int gissning; 05 int antal = 0; 06 puts ( "Gissa ett tal mellan 0 och 100, (tryck [Retur] för att starta)" ); 07 getchar ( ); 08 srand( clock ( ) ); 09 tal = RND * 100; 10 do 04 { 11 printf ( "\nVilket tal tror du att det är ? " ); 12 scanf ( "%d", &gissning ); 13 if ( gissning < 0 || gissning > 100 ) 13 { 06 puts ( "Ogiltigt värde! Försök igen." ); 13 } 14 else 04 { 13 if ( gissning < tal ) 13 { 06 puts ( "Talet är för litet!" ); 13 } 15 else if ( gissning > tal ) 15 { 06 puts ( "Talet är för stort!" ); 15 } 16 antal++; 04 } 17 } while ( gissning != tal ); 11 printf ( "\nRätt gissat! Du klarade det på %i försök\n", antal ); 16 return ( 0 ); 04 } O.B.S. radnumreringen tillhör inte den egentliga källkoden.
|