◄Programmierfrage zu C► if / else schleifen abfragen

... komplette Frage anzeigen

2 Antworten

Hallo.

Die Variable "p" ist vom typ "int". Daher kann diese Variable ausschließlich Ganzzahlen aufnehmen.

Um einen Text einzugeben benötigst du eine Variable vom Typ String. Diesen Datentyp gibt es zwar in C++ aber nicht in C, so dass man in C ein Datenfeld (array) vom Typ "char" (oder "short") verwendet, wo jeder Buchstabe in einem Feldelement gespeichert wird. Das Ende des eingegebenen Wortes wird mit einem "NUL-Zeichen" markiert; das ist das Zeichen, das beim Speichern der Zahl 0 entspricht:

char p[100]; // Maximal 99 Buchstaben + 1 NUL-Zeichen
...
printf("Befehl eingeben: ");
gets(p); // Alternativ: scanf("%s",p);

Viele Compiler geben beim Befehl "gets" eine Warnmeldung aus, da das Programm abstürzt, wenn man später einen längeren "Befehl" eingibt als hier im Beispiel 99 Zeichen. Es gibt einen alternativen Befehl - fgets - der aber seine Tücken hat.

Ein weiteres Problem ist es, dass man jetzt jeden einzelnen Buchstaben auf Gleichheit überprüfen muss. Dafür gibt es aber eine fertige Funktion, nämlich "strcmp" (unterscheided Groß- und Kleinschreibung) bzw. - je nach Compiler - "stricmp" oder "strcmpi" (Microsoft) oder "strcasecmp" (Linux) (ignoriert jeweils Groß- und Kleinschreibung).

Die Funktionen geben 0 zurück, wenn die Strings gleich sind:

if(strcmp(p,"Kekskuchen")==0)
{
    // Eingabe war richtig

if (p=="Kekskuchen")

Das funktioniert meines Wissens zwar in C++, aber definitiv nicht in C. Ein kleines Beispiel:

const char *a, *b, *c;
a="Kekskuchen";
b="Kekskuchen";
c=a;
if(a==b) ... // Bedingung ist falsch
if(a==c) ... // Bedingung ist wahr

Warum ist "a==b" falsch und "a==c" wahr, obwohl beide Variablen den gleichen Text haben?

Die Antwort ist: Bei einem Vergleich mit "==" wird bei Zeichenketten bei C überprüft, ob beide die gleiche Adresse haben (und nicht, ob beide den gleichen Inhalt haben). Dies wäre bei Variablen "a" und "c" der Fall, jedoch nicht bei "b". Das Vergleichen von zwei Zeichenketten (Strings) mit "==" kann man in C daher nicht machen.

If schleife

Eine "Schleife" ist eine Widerholung eines Programmteils (z.B. "while" oder "for").

Bei "if" spricht man hingegen von einer "if-Verzweigung" und nicht von einer "Schleife".

Antwort bewerten Vielen Dank für Deine Bewertung

ich glaub', du steht hier an einem Scheideweg: Martin hat alles dazu gesagt, der Compiler hat eine klare Fehlermeldung angezeigt (macht er nicht immer).

Du musst jetzt damit klarkommen. Sonst kannst Du das mit dem Programmieren vergessen. (Gibt auch andere schöne Dinge)

Tut mir leid, Max.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?