Archiv verlassen und diese Seite im Standarddesign anzeigen : An bestimmte Programmstelle springen
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, 18:22
https://www.roboternetz.de/community/threads/58579-Sowas-wie-SPRUNGMARKEN-in-C?highlight=goto
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
Wie gehts mit Flughafen?
http://www.rn-wissen.de/index.php/C-Tutorial#goto-Anweisung
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
http://www.leo.org/information/freizeit/fun/pascal.html
Lang lebe FORTRAN! :)
LG Rolf
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....
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, 16: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
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
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
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! :-(
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.