Pointer

Schnelle objektorientierte, kompilierende Programmiersprache.
Ivo
Beiträge: 26
Registriert: Fr Sep 26, 2014 3:54 pm

Pointer

Beitrag von Ivo » Fr Sep 26, 2014 4:17 pm

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Pointer

Beitrag von nufan » Fr Sep 26, 2014 6:54 pm

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.

Code: Alles auswählen

while(*s)
ist im Prinzip nur Kurzschreibweise für:

Code: Alles auswählen

while(*s != '\0')
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?

Ivo
Beiträge: 26
Registriert: Fr Sep 26, 2014 3:54 pm

Re: Pointer

Beitrag von Ivo » Fr Sep 26, 2014 7:36 pm

danke nufan, jetzt habe ich verstanden.
ich habe es so geschrieben. Danke für die ausführliche Erklärung. :)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Pointer

Beitrag von nufan » Fr Sep 26, 2014 8:11 pm

Du hast noch ein Problem, falls alt == neu ist.

Ivo
Beiträge: 26
Registriert: Fr Sep 26, 2014 3:54 pm

Re: Pointer

Beitrag von Ivo » Sa Sep 27, 2014 9:30 am

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pointer

Beitrag von Xin » Sa Sep 27, 2014 10:21 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Ivo
Beiträge: 26
Registriert: Fr Sep 26, 2014 3:54 pm

Re: Pointer

Beitrag von Ivo » Sa Sep 27, 2014 11:50 am

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pointer

Beitrag von Xin » Sa Sep 27, 2014 12:42 pm

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++;
}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Ivo
Beiträge: 26
Registriert: Fr Sep 26, 2014 3:54 pm

Re: Pointer

Beitrag von Ivo » Sa Sep 27, 2014 1:11 pm

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. :?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pointer

Beitrag von Xin » Sa Sep 27, 2014 2:09 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten