ein Kapitel zurück                                           ein Kapitel weiter

Den Vergleichsoperator '!' haben wir kurz im vorherigen Kapitel 'if - else u. Vergleichsoperatoren' kennen gelernt. Ich bin der Meinung der Operator hat ein extra Kapitel verdient, da er oft nicht verstanden wird. Der Operator '!' kann einen Wert negieren. Das heißt er kann aus wahr, falsch machen, und aus falsch, eben wahr. Beispiel...

/*Download:neg.c*/
#include <stdio.h>

int main()
{
int checknummer;
printf("Bitte geben sie 4711 ein : ");
scanf("%d",&checknummer);

if(!(checknummer == 4711))
printf("Fehler!! 4711 hätten sie eingeben sollen\n");

else
printf("Ihre Eingabe wahr richtig\n");
return 0;
}





Ich habe jetzt im Anweisungsblock nach 'if' und nach 'else' die geschweiften Klammern weggelassen, da eh nur eine Anweisung folgt.

Nun zur Erklärung von...

if(!(checknummer == 4711))

Hier wird geprüft - ob der Ausdruck zwischen den Klammern nicht das ist was er sein sollte. Das heißt der ! - Operator überprüft den Wert in der Klammer und gibt 1(wahr) zurück wenn der Wert in der Klammer nicht 4711 ist. Ist der Wert den wir eingegeben haben 4711 dann wird 0(falsch) zurückgegeben und das Programm geht zur 'else' - Anweisung und gibt aus das die Zahl 4711 ist.

Eine kleine Tabelle zum besseren Verständnis...

Anweisung == Anweisung
if(a==1) gleich wie if(a)
if(a==0) gleich wie if(!a)
if(a>b) gleich wie if(!(a<=b))
if((a-b)==0) gleich wie if(!(a-b))

Natürlich gibt es dazu auch noch ein Programmbeispiel....

/*Download:neg2.c*/
#include <stdio.h>

int main()
{
int a,b;

printf("Zahl 1 : ");
scanf("%d",&a);

printf("Zahl 2 : ");
scanf("%d",&b);

if(!a)
printf("Abbruch: Zahl1 ist 0\n");

else if(!b)
printf("Abbruch: Zahl2 ist 0\n");

else
printf("%d * %d = %d\n",a,b,a*b);
return 0;
}






Das Programm ist ziemlich einfach. Sie geben zwei Zahlen, dann in der ersten oder zweiten Anweisung...

......
if(!a)
......
else if(!b)
.....


...wird geprüft ob eine der beiden Zahlen 0 ist. Denn 0 * irgendetwas ist immer 0. Somit brauchen wir gar nicht anfangen zu rechnen. Wenn (!a) also a==0 gibt das Programm aus das die Zahl1 0 ist. Wenn nicht wird auf (!b) also b==0 geprüft. Falls das war ist gibt das Programm aus das die Zahl2 0 ist und rechnet ebenfalls nicht weiter. Falls beide Zahlen nicht 0 sind wird in der 'else' - Anweisung die Multiplikation durchgeführt und gibt diese auf dem Bildschirm aus.
Das ganze hätten wir natürlich auch in ein Abfrage packen können...

if(!(a*b))

Es ist aber auch nicht mehr so einfach zum lesen!

Was schätzen sie passiert wenn man schreibt...

if(!(!a))    //;)

Nun wir überprüfen ob der Wert in der Klammer nicht das ist was er nicht ist. Also ob 'a' nicht ungleich 'a' ist. Oder einfacher Ausgedrückt...

if(a)

...entspricht das selbe wie !(!a). Natürlich ist die 2. Variante vorzuziehen.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf