Backspace-Funktionalität
-
Oder schreibst dir die Kopierfunktion selbst:
char a[] = "Hello World"; char* b = a; while ( *b ) *b = *(b+++1); puts ( a );
-
Big Brother schrieb:
while ( *b ) *b = *(b+++1);
undefiniert mangels sequence point.
while ( *b++ ) b[-1] = *b;
-
camper schrieb:
undefiniert mangels sequence point.
wegen was? was ist das ?
-
Hallo,
es handelt sich um "Programmabarbeitungs-Punkte", an denen jeweils garantiert ist, dass alle "Seiteneffekte" (hier die Auswirkungen der Inkrementierung von b) schon eingetreten sind. In einer Zuweisung gibt es keinen sequence point, und damit entsteht "Undefiniertheit", siehe:
http://en.wikipedia.org/wiki/Sequence_point
MfG,
Probe-Nutzer
-
Ja, ok.
Hier habe ich auch noch etwas interssantes mit Beispielen zu diesem Thema gefunden:
http://www.schellong.de/c.htm#seqpGruß,
B.B.
-
Probe-Nutzer schrieb:
Der Artikel bedarf aber dringend einer Überholung.
The + operator is not a sequence point and therefore in the expression f()+g(), it is possible that either f() or g() will be executed first.
Zwar stimmen beide Teile, aber dazwischen besteht keine Implikation.
-
*(b+++1)
Was könnte hier denn schief gehen?
Ist das nicht egal, ob zuerst b++ und dann ne 1 addiert wird, oder erst ne 1 addiert und dann b inkrementiert wird ?
-
Alle Wikipedia-Artikel sollten grundsätzlich kritisch gelesen werden (das habe ich hier nicht), aber die Links, die dort angegeben werden, sind oft brauchbar (dort findet sich ein Link zu den C-FAQ, der es ganz gut beschreibt). Eigentlich müsste ich dich noch auffordern, dass du den Artikel entsprechend verbesserst, aber ich bin da selbst in Sachen Wikipedia recht wenig engagiert.
@Genauwissenwoller:
Die Zuweisung zur Variablen b, die auf der linken Seite ebenfalls auftaucht, ist das Problem, nicht der zugewiesene Ausdruck, der ist ok. Man kann einfach nicht sagen, welchen Wert b nach der Zuweisung hat
MfG,
Probe-Nutzer
-
nachdem ich von euch so viele hilfreiche Lösungsvorschläge bekommen habe, möchte ich jetzt noch einen oben draufsetzen. Das mit dem Backspace funktioniert jetzt alles schon ganz gut. Jetzt zum Problem. Was wenn ich ein Datum habe z.B. "30.11.01" und ich möchte Backspace benutzen, aber die Punkte sollen sich nicht verschieben. Anders formuliert. Ich kann das Datum genauso löschen wie alles andere bloß die Punkte sollen unverändert bleiben.
Wenn euch jetzt auch noch dafür etwas einfällt, dann bin ich wirklich wirklich wirklich beeindruckt.
MfG
naikoteki
-
muttu nen string immer wieder neu ausgeben, den du entsprechend den backspace tastenanschlägen veränderst.
-
muttu nen string immer wieder neu ausgeben, den du entsprechend den backspace tastenanschlägen veränderst.
Sorry, mein Guter, aber mit dieser Antwort kann ich so überhaupt nichts anfangen. Is scho a bissl dünn.
MfG
naikoteki
-
ich nehme an, du möchtest eine datumeingabe programmieren.
weiter nehme ich an, das datum wird zunächst als ein string eingelesen.
wenn nicht, dann sollte es das, meinen vorstellungen nach.wird backspace gedrückt, wird jeweils das letzte zeichen aus dem datumstring gelöscht und dieser string wird wieder ausgegeben.
ist das zeichen ein punkt, so wird das zeichen vor dem punkt gelöscht, der string wird ausgegeben. usw.usw.