While Schleife?!
-
Hallo. Ich habe hier einen kurzen Scriptteil, dabei habe ich leider einige Probleme:
while (Test[i]) i++; i--; for (j=0; j<i; j++, i--) { // irrelevant ... }Meine Fragen lauten:
Was bedeutet das i++ und direkt danach i--?
Soll das heißen, dass i erst um 1 erhöht und danach
sofort wieder um 1 gesenkt wird?
Welchen Sinn würde das machen? Kann es sein, das bei
der While Schleife eine Klammerung fehlt? also ab while
bis zum Ende des Scripts?Wäre nett, wenn mir jemand diese Frage beantworten
könnte. Ich versteh's leider nicht
-
Hallo
Soll das heißen, dass i erst um 1 erhöht und danach
sofort wieder um 1 gesenkt wird?Du must genauer lesen : j wird um 1 erhöht, i wird um 1 gesenkt. Sind zwei verschiedene Buchstaben und damit verschiedene Variablen. Mit diesem Hinweis wirst du den Code dann vielleicht selber verstehen. Und außerdem kannst du den Code ja auch mal mit einem Compiler ausprobieren.
Du beziehst deine Aussage vermutlich mit auf die while-Schleife? Dann solltest du daran denken das die while- und die for-Schleife zwei getrennte Blöcke sind. Das ist syntaktisch richtig, aber durch die weggelassenen {}-Klammern bei der while-Schleife vielleicht verwirrend. Zuerst wird die while-Schleife abgearbeitet (i wird also potentiell mehrmals erhöht), dann die for-Schleife (i wird wieder gesenkt).
bis bald
akari
-
int i,j = 0; char k; cstring text [4]= ("Test"); //welchen typ hat cstring?falls du die frage nicht beantworten kannst, sag mir doch mal, was du davor alles includest oder versuch mal, ob deine ide beim rechtsklick auf cstring dir "Go To Declaration" anbietet...
Was bedeutet das i++ und direkt danach i--?
for (j=0; j<i; j++, i--)was daran genau verstehst du nicht?
oder anders: sag doch mal, was daran du verstehst und was es heißt...Kann es sein, das bei der While Schleife eine Klammerung fehlt?
while (Test[i]) i++;nein, hier fehlt nichts... so lange Test[i] != 0 ist, wird i incrementiert - auf den sinn dahinter wirst du wohl selbst kommen, wenn du weist, dass 0 das letzte zeichen im string ist ^^ (wobei wir wieder dabei wären, was cstring ist - und vermutlich sollte das oben
cstring test [5] ("Test");heißen - und cstring wird char sein.
Wenn du diesen Sinn verstanden hast, verstehst du auch dasi--;vor der for-schleife...Ich scheitere momentan an dieser merkwürdigen While Schleife mit i++ i--
Ich sehe da keine while schleife mit diesen beiden anweisungen... Das i-- was du vermutlich meinst, ist außerhalb der schleife - um genauer zu sein danach.bb
-
Erstmal danke für eure Hilfe, bin jetzt schon ein gutes Stück weiter

Gut heißt jetzt also, er fragt: Zeichen 0 vorhanden?
Zeichen 0 ist das das erste "T". Also ungleich 0 und somit wird i um 1 erhöht.
Das macht er nun noch mit Zeichen 1,2,3 und 4. Zeichen ist dann 0? Weil ja
da das "Test" schon zuende ist. Also bleibt i bei 3.i ist jetzt 3
wird dann wieder um 1 gesenkt.
i ist jetzt 2.Lieg ich da jetzt richtig?
Also kommt am Ende nach der For Schleife "eT" raus? Richtig?
Anmerkung:
Das cstring char ist, kann gut sein.
Der Lehrer hat das nicht vorgegeben sondern nur gesagt:
text ist ein cstring mit entsprechender Länge und dem Inhalt test.
-
freddy96 schrieb:
Gut heißt jetzt also, er fragt: Zeichen 0 vorhanden?
Zeichen 0 ist das das erste "T". Also ungleich 0 und somit wird i um 1 erhöht.
Das macht er nun noch mit Zeichen 1,2,3 und 4. Zeichen ist dann 0? Weil ja
da das "Test" schon zuende ist. Also bleibt i bei 3.Genau das macht die While-Schleife und das i--; darunter...
Man könnte es auch so formulieren: Es gibt den Index des letzten Zeichens aus...Jetzt kommt die for-Schleife...
Welche Entwicklungsumgebung hast du denn nun? Visual Studio? Auch wenn nicht: es wird auf jeden fall einen debugger geben - und damit kannste wunderbar nachvollziehen (sofern du breakpoints gesetzt hast), was wo wie gemacht wird, was rauskommt und wieso das so ist..
bb
-
unskilled schrieb:
Welche Entwicklungsumgebung hast du denn nun? Visual Studio? Auch wenn nicht: es wird auf jeden fall einen debugger geben - und damit kannste wunderbar nachvollziehen (sofern du breakpoints gesetzt hast), was wo wie gemacht wird, was rauskommt und wieso das so ist..
Wir arbeiten mit gedit in der Schule. Aber die Aufgabe hier soll
ja auf dem Papier gelöst werden und gesagt werden, was bei text[] am Ende rauskommt."eT" kommt raus?! Oder?!
Edit: "TeeT" meinte ich, hab ganz vergessen, das der Rest ja erhalten bleibt
Edit 2: "tseT" meinte ich, hab den Fehler jetzt gemerkt
Eine frage noch:
Oben hatte jemand geschrieben: char [5] "Test"
Warum aber 5?
Zeichen 0 ist das T
Zeichen 1 ist das e
Zeichen 2 ist das s
Zeichen 3 ist das t
Zeichen 4 ist die \0
Aber warum dann 5?
-
Aber warum dann 5?
Zeichen 0 ist das T Zeichen 1 ist das e Zeichen 2 ist das s Zeichen 3 ist das t Zeichen 4 ist die \0 /* ab irgendeiner zeilenanzahl werden hier doch zeilennummern angezeigt (ab 8 ^^)*/wie viele elemente hat dieses array also?
bb
-
Ist die maximale Arraylänge also anders als die am Ende ausgelesene Ziffernstelle?
Sprich ist wenn ich ein Array [3] = "AB" definiere das A die erste und das B die zweite Stelle? \0 die dritte Stelle.
Und beim Auslesen ist dann das A die 0. Stelle und das B die erste Stelle, und \0 die zweite Stelle?Heißt man kann bei einem Array [3] niemals die [3] Stelle auslesen? (also sinnvoll auslesen... klar kann man sie auslesen aber sie wird immer leer sein)
Wäre zwar logisch, da ja ein Array[0] nicht geht, aber ist irgendwie komisch?
-
Ich hab jetzt nicht genau verstanden was deine Frage ist aber falls es das ist:
Ein Array[5]. Ist ein Feld über 5 Elemente.
Der Index startet allerdings bei 0 und nicht bei 1
Also Array[0] spricht das erste Element an.
Array[4] das letzte Element
-
Das ist nur ein logisches Problem, dass du da hast.

Anderst, als man es im täglichen Leben gewohnt sind fängt in Programmen ein Index bei 0 und nicht bei 1 an.
int a[5]; // mach mir ein Array mit 5 int's std::cout << a[ 0 ]; // Das Element mit Index 0 ist das erste Element. a [ 1 ]; // zweites Element ... a [ 4 ]; // fünftes Element a [ 5 ]; // sechtes Element ?!Da du ja lediglich 5 Element in deinem Array hast geht die letzte Zeile nicht. Oder sagen wir es so du greifst auf Speicher zu, den nicht nix angeht. Und:
Heißt man kann bei einem Array [3] niemals die [3] Stelle auslesen? (also sinnvoll auslesen... klar kann man sie auslesen aber sie wird immer leer sein)
leer ist ein so weiter Begriff.
- Auch 0 wäre etwas..
Ungücklicherweise kann man das ganze kompilieren und wenn man lediglich eine Ausgabe macht funktioniert es auch. (meist ist der Wert sowas, wie 888932.. ).
Spätestens bei der Zuweisung auf den Speicher wird es einen Fehler geben. (Muss aber nicht, da undefiniert..)
-
Wenn du deinen Lehrer ärgern und dich zum Affen machen willst (wie ich jetzt vermutlich :D) frag ihn doch mal warum er nicht folgendes macht:
#include <string> #include <algorithm> //... std::string text = "test"; std::reverse(text.begin(), text.end());