PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : An bestimmte Programmstelle springen



petzi--
15.10.2012, 17:07
Hallo alle zusammen,
ich bräuchte eure Hilfe
ich benötige den Befehl um in meinem Programm an eine bestimmte Stelle zu springen ...(((((wenn(blabla) dann gehe zu Zeile xy)))))
schonmal danke

HeXPloreR
15.10.2012, 17:22
https://www.roboternetz.de/community/threads/58579-Sowas-wie-SPRUNGMARKEN-in-C?highlight=goto

petzi--
15.10.2012, 17:31
Ich verstehe Bahnhof...

RolfD
15.10.2012, 17:52
http://de.wikipedia.org/wiki/Spaghetticode

im englischen Wiki steht sogar under CLEAN: drin wie man es richtig macht...

http://en.wikipedia.org/wiki/Spaghetti_code

Lesenswert ist aber auch dieser Artikel...

http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest

Aber es gibt auch wirklich ein goto statement in c, z.B. da beschrieben:

http://www.acm.uiuc.edu/webmonkeys/book/c_guide/1.6.html

Allerdings findet man sowas auch mit der Suchmaschine seines Vertrauens...

LG Rolf

Valen
15.10.2012, 17:53
Wie gehts mit Flughafen?

http://www.rn-wissen.de/index.php/C-Tutorial#goto-Anweisung

Max Web
15.10.2012, 17:55
Dafür gibt es in C den GOTO-Befehl, einfach mal Google danach fragen, dort gibt es viele gute Tutorials. Oder das von Oberallgeier aufgeführte Buch in dem verlinkten Beitrag (K&R), das ist wirklich gut!

Ich möchte hier jetzt keinen neuen "Glaubenskrieg" entfachen, aber:
Im Allgemeinen ist GOTO bei C-Programmierern sehr verpönt und sollte nur dann benutzt werden, wenn Du es WIKLICH brauchst (und dann auch eher in Assembler).
Für mich klingt Dein Fall aber eher nach Code-Smell ;)

Daher solltest Du Dein Programm eher so strukturieren: wenn(blabla) dann führe Methode XY aus. So kannst Du auch später noch gut nachvollziehen, was Du damals eigentlich geschrieben hast.

Beispiel:
if(bumper_left){
ausweichen_links();
}etc.


Grüße,

Max

RolfD
15.10.2012, 18:29
http://www.leo.org/information/freizeit/fun/pascal.html
Lang lebe FORTRAN! :)

LG Rolf

petzi--
16.10.2012, 12:32
Vielen dank für eure Antworten...
hab den code jetzt so ...






if(obstacle_right) //Hinderniss rechts//
{
move(40, BWD, DIST_MM(20), true);
rotate(40, LEFT, 10, true);
moveAtSpeed(80,80); //drehen bis kein Hinderniss mehr zu sehen
A:
if(!obstacle_right)
{
move(40, BWD, DIST_MM(10), true);
rotate(40, LEFT, 5, true);
move(40, FWD, DIST_MM(10), true);
moveAtSpeed(80,80);
}
else
{
goto A;
}
}



irgendwas klappt aber no ned so ganz....
schonmal danke....

Max Web
16.10.2012, 14:21
Sag ich doch, dass Du kein sinnvolles Goto brauchen wirst ;) Außer in Assembler habe ich das bisher auch noch nie benötigt.
Das GOTO in Deinem Code hat eigentlich nur einen Zweck: es macht den Code schwerer nachvollziehbar. Mehr nicht.


irgendwas klappt aber no ned so ganz....
Tip: Immer beschreiben, was genau nicht geht und was der Code machen soll. In dem Fall können wir das zwar erraten, aber das ist nicht immer so.

Schau Dir mal die Demoprogramme des RP6 an, da sind schon einige gute Lösungen, um Hindernisse zu umfahren. Besonders zu empfehlen ist das "Move_05"-Beispiel,
das bietet Dir schon einmal eine Grundarchitektur, um verschiedene Verhaltensmuster umzusetzen.

Grüße,

Max

HeXPloreR
16.10.2012, 15:33
Mensch ja, er baut ein Goto ein...wo ist das problem dabei, außer das er nicht weiß wo es hin geschreiben werden muß...

Jetzt sind zwanzig Zeilen ja soooo unglaublich schwer zu lesen...man man man man

Er hat nach einer Sprunganweisung gefragt: GOTO ist eine "erlaubte" Sprunganweisung. <- Punkt

Valen
16.10.2012, 17:50
Vielen dank für eure Antworten...
hab den code jetzt so ...






if(obstacle_right) //Hinderniss rechts//
{
move(40, BWD, DIST_MM(20), true);
rotate(40, LEFT, 10, true);
moveAtSpeed(80,80); //drehen bis kein Hinderniss mehr zu sehen
A:
if(!obstacle_right)
{
move(40, BWD, DIST_MM(10), true);
rotate(40, LEFT, 5, true);
move(40, FWD, DIST_MM(10), true);
moveAtSpeed(80,80);
}
else
{
goto A;
}
}



irgendwas klappt aber no ned so ganz....
schonmal danke....Mit dein Goto hast du ein Art von Endloss--Schleife eingebaut.

Sag mal das obstacle_right stimmt (den Wert, oder was es auch ist, ist nicht 0):

obstacle_right=1;

resultiert in die Ablauffolge:

move(40, BWD, DIST_MM(20), true);
rotate(40, LEFT, 10, true);
moveAtSpeed(80,80); //drehen bis kein Hinderniss mehr zu sehen
A:
if(!obstacle_right) // wird passiert weil obstacle_right ist Wahr)
goto A;
if(!obstacle_right) // wird wieder passiert weil es immer noch nicht ist geändert
goto A;
....
ad infinitem

RolfD
16.10.2012, 19:18
Tu mir nen gefallen und werf dieses abgrundkaputte goto da raus...

So geht das!

while(!obstacle_right)
{
move(40, BWD, DIST_MM(10), true);
rotate(40, LEFT, 5, true);
move(40, FWD, DIST_MM(10), true);
moveAtSpeed(80,80);
}

Nicht nur GOTOs gehören verboten, auch jedes 2.te IF ist ranzig!
Und die anderen gucken sich den Schrott da oben bitte nicht ab... das is bah bah bah !

Da fühl ich mich an die gruseligen Zeit vom VC20, ZX81 und Apple 2 erinnert... ja.. es gab auch vor dem C64 schon Computer!
(Und Leute die aus solchen Fehlern lernten)
LG Rolf

Dirk
17.10.2012, 19:56
Da fühl ich mich an die gruseligen Zeit vom VC20, ZX81 und Apple 2 erinnert...
Was heißt hier "gruselige Zeiten"??? Sag nichts gegen meinen alten Apple ][ !!! :Haue

Ich habe ihn geliebt! :-(