Vergleichsoperatoren
Die Zeichen < und >, die du in Bedingungen verwendet hast, sind Vergleichsoperatoren: Sie vergleichen zwei Werte, und das Ergebnis ist wahr oder falsch. C hat sechs davon:
==gleich:5 == 5!=ungleich:5 != 3>größer als:5 > 3<kleiner als:3 < 5>=größer oder gleich:5 >= 5<=kleiner oder gleich:3 <= 5
Alle Beispiele in der Liste sind wahr. In !=, >= und <= steht das Gleichheitszeichen immer an zweiter Stelle, ohne Leerzeichen dazwischen. Achte an der Grenze auf den Unterschied zwischen > und >=: 18 > 18 ist falsch, aber 18 >= 18 ist wahr. „18 oder älter“ ist also alter >= 18.
„Gleich“ schreibt man mit zwei Gleichheitszeichen, ==, denn ein einzelnes hat schon eine Aufgabe: punkte = 10 weist zu, es speichert also 10 in der Variablen punkte. punkte == 10 vergleicht: Es fragt, ob punkte den Wert 10 enthält, und ändert nichts.
In einer Bedingung = statt == zu schreiben ist einer der häufigsten Fehler. Auf dieser Seite fängt der Compiler ihn ab:
#include <stdio.h>
int main(void) {
int punkte = 7;
if (punkte = 10) {
printf("Volle Punktzahl!\n");
}
printf("Punkte: %d\n", punkte);
return 0;
}Der Compiler meldet:
main.c:6:16: error: using the result of an assignment as a condition without parentheses [-Werror,-Wparentheses]
6 | if (punkte = 10) {
| ~~~~~~~^~~~
main.c:6:16: note: place parentheses around the assignment to silence this warning
6 | if (punkte = 10) {
| ^
| ( )
main.c:6:16: note: use '==' to turn this assignment into an equality comparison
6 | if (punkte = 10) {
| ^
| ==
1 error generated.punkte = 10 in der Bedingung vergleicht nichts. Es würde 10 in punkte speichern und dann diese 10 als Bedingung verwenden, die als wahr gilt. Der Block würde jedes Mal ausgeführt, egal was punkte vorher enthielt. Anderswo lassen C-Compiler das meist höchstens mit einer Warnung durch, und das Programm tut dann stillschweigend das Falsche. Hier ist es ein Fehler, du merkst es also sofort. (Das Ende der ersten Zeile, in eckigen Klammern, nennt nur die Prüfung, die das Problem gefunden hat.)
Unter dem Fehler fügt der Compiler zwei Notizen hinzu, Zeilen mit note:, die Korrekturen vorschlagen. Die zweite ist hier die richtige: Verwende ==. Die erste, über Klammern, ist für den seltenen Fall gedacht, dass jemand wirklich einen Wert innerhalb einer Bedingung speichern will, folge ihr also nicht.
Du kannst Zeichen genauso vergleichen wie Zahlen. Ein Zeichen steht in einfachen Anführungszeichen:
char groesse = 'M';
if (groesse == 'M') {
printf("Wir haben deine Größe\n");
}Das gibt Folgendes aus:
Wir haben deine GrößeGroß- und Kleinbuchstaben sind verschiedene Zeichen, deshalb ist 'm' == 'M' falsch. Ganze Texte zu vergleichen funktioniert in C anders; wie, lernst du in der Lektion über Zeichenketten.
Sei vorsichtig mit == und Dezimalzahlen. Der Computer speichert die meisten von ihnen nur näherungsweise, deshalb ist sogar 0.1 + 0.2 == 0.3 falsch. Vergleiche einen double stattdessen mit <, >, <= oder >=.
So schreibst du es:
Anweisungen
- 1
Ein Onlineshop schenkt seinem 100. Kunden ein Geschenk. Führe das Programm aus und lies die erste Zeile des Fehlers: Sie sagt dir, wo das Problem liegt und was es ist. Korrigiere die Bedingung, sodass sie vergleicht. Dann gibt das Programm
Kundennummer 57aus. - 2
Der Shop liefert kostenlos, wenn eine Bestellung 1000 oder mehr kostet. Lege unter dem letzten
printfeineint-Variablebestellwertmit dem Wert1000an und schreibe eineif-Anweisung mit einemelse-Zweig: Wennbestellwertmindestens 1000 ist, gibKostenlose Lieferungaus, sonstDie Lieferung kostet 99. Auch eine Bestellung von genau 1000 wird kostenlos geliefert, wähle den Operator also sorgfältig. Das Programm gibt Folgendes aus:Kundennummer 57 Kostenlose Lieferung