Seite 1 von 2
Pointer
Verfasst: Fr Sep 26, 2014 4:17 pm
von Ivo
Hallo an alle, ich bin Anfänger und lerne ich gerade "C". Hier habe ich Probleme mit einer Aufgabe.
Ich kann nicht in der while schleife habe alles versucht. In der while schleife wird geprüft, ob wahr oder
falsch ist, da der Ausdruck (der Zeiger) nicht Null ist wird die Bedingung erfüllt ja aber es ist eine Endlose Schleife.
Wenn ich gebe dass (*s != ´\0) dann wird die Schleife nicht erfüllt. Ich checke das irgendwie nicht.
Werde mich freuen wenn mir jemand erklären kann, wo meiner Fehler ist. Danke viel Malls.
Re: Pointer
Verfasst: Fr Sep 26, 2014 6:54 pm
von nufan
Ivo hat geschrieben:In der while schleife wird geprüft, ob wahr oder falsch ist, da der Ausdruck (der Zeiger) nicht Null ist wird die Bedingung erfüllt ja aber es ist eine Endlose Schleife.
Die Bedingung sehe ich in deinem Code nirgends.
ist im Prinzip nur Kurzschreibweise für:
Ivo hat geschrieben:Wenn ich gebe dass (*s != ´\0) dann wird die Schleife nicht erfüllt. Ich checke das irgendwie nicht.
Gehen wir dein Beispiel durch.
Beim ersten Schleifendurchlauf zeigt s auf dein erstes Zeichen, also ist *s == 'I'.
Nun kommt die if-Bedingung. Ist *s ('I') == alt ('e')? => Nein. Was wird gemacht? Nichts!
Nächster Durchlauf. s zeigt auf dein erstes Zeichen, also ist *s == 'I'.
Nun kommt die if-Bedingung. Ist *s ('I') == alt ('e')? => Nein. Was wird gemacht? Nichts!
Nächster Durchlauf. s zeigt auf dein erstes Zeichen, also ist *s == 'I'.
Nun kommt die if-Bedingung. Ist *s ('I') == alt ('e')? => Nein. Was wird gemacht? Nichts!
...
Erkennst du den Fehler?
Re: Pointer
Verfasst: Fr Sep 26, 2014 7:36 pm
von Ivo
danke nufan, jetzt habe ich verstanden.
ich habe es so geschrieben. Danke für die ausführliche Erklärung.

Re: Pointer
Verfasst: Fr Sep 26, 2014 8:11 pm
von nufan
Du hast noch ein Problem, falls alt == neu ist.
Re: Pointer
Verfasst: Sa Sep 27, 2014 9:30 am
von Ivo
also du meinst ist *s == ´E´. Nun kommt die If- Bedingung.
ist *s (´E´) != alt (´E´) => nein => else-Bedingung.
*s(´E´) = neu also E = E . Du meinst , dass ich noch
eine else-Bedingung brauche falls alt == neu ist?
Re: Pointer
Verfasst: Sa Sep 27, 2014 10:21 am
von Xin
Moin Ivo,
bitte poste Text, wenn Du Quelltext posten möchtest, dann können wir zitieren, statt abzuschreiben.
Du ersetzt ein Zeichen oder Du lässt es. In jedem Fall musst Du nachdem Du ersetzt hast - oder es gelassen hast - auf das nächste Zeichen schauen. s++ ist also in jedem Fall durchzuführen und sollte daher unabhängig von der if-Bedingung stehen.
Re: Pointer
Verfasst: Sa Sep 27, 2014 11:50 am
von Ivo
Xin hat geschrieben:Moin Ivo,
bitte poste Text, wenn Du Quelltext posten möchtest, dann können wir zitieren, statt abzuschreiben.
Sorry
Xin hat geschrieben:
Du ersetzt ein Zeichen oder Du lässt es. In jedem Fall musst Du nachdem Du ersetzt hast - oder es gelassen hast - auf das nächste Zeichen schauen. s++ ist also in jedem Fall durchzuführen und sollte daher unabhängig von der if-Bedingung stehen.
Danke dir aber ich verstehe jetzt nicht was ich machen soll
Wie unabhängig von der if-Bedingung?
Re: Pointer
Verfasst: Sa Sep 27, 2014 12:42 pm
von Xin
Ivo hat geschrieben:Xin hat geschrieben:
Du ersetzt ein Zeichen oder Du lässt es. In jedem Fall musst Du nachdem Du ersetzt hast - oder es gelassen hast - auf das nächste Zeichen schauen. s++ ist also in jedem Fall durchzuführen und sollte daher unabhängig von der if-Bedingung stehen.
Danke dir aber ich verstehe jetzt nicht was ich machen soll
Wie unabhängig von der if-Bedingung?
Dann will ich mal abtippen... ^^
Code: Alles auswählen
while(*s)
{
// Eventuell austauschen
if( *s == alt )
*s = neu;
// zum nächsten Element springen, unabhängig davon, ob ausgetauscht wurde
s++;
}
Re: Pointer
Verfasst: Sa Sep 27, 2014 1:11 pm
von Ivo
Xin hat geschrieben:Ivo hat geschrieben:Xin hat geschrieben:
Du ersetzt ein Zeichen oder Du lässt es. In jedem Fall musst Du nachdem Du ersetzt hast - oder es gelassen hast - auf das nächste Zeichen schauen. s++ ist also in jedem Fall durchzuführen und sollte daher unabhängig von der if-Bedingung stehen.
Danke dir aber ich verstehe jetzt nicht was ich machen soll
Wie unabhängig von der if-Bedingung?
Dann will ich mal abtippen... ^^
Code: Alles auswählen
while(*s)
{
// Eventuell austauschen
if( *s == alt )
*s = neu;
// zum nächsten Element springen, unabhängig davon, ob ausgetauscht wurde
s++;
}
Ja das habe ich auch ausprobiert es ist eine endlose schleife es kommt nicht raus.

Re: Pointer
Verfasst: Sa Sep 27, 2014 2:09 pm
von Xin
Erstens: Poste Quelltext als Text - erwähnte ich das schon?
Zweitens: Du hast etwas anderes geschrieben. Die Klammern {} schreibt man nicht, weil sie so schön geschwungen aussehen, sondern weil sie die darin befindlichen Befehle zu einem Befehlspaket zusammenfügen. Die Befehle sind dann entsprechend nicht unabhängig voneinander.