Alternativen für goto :/
-
Durch Umgestalten der Schleife und anderen if-Abfragen, negation, und / oder "continue" müsstest Du beide GOTOs wegbekommen. GOTO ist wirklich nur in ganz seltenen Fällen angebracht. Hioer geht es ganz ohne
-
Mit Schleifen natürlich. Das hier ist zwar noch nicht der Gipfel der Eleganz wegen der Endlosschleife, aber es zeigt, wie man deine GOTO Konstrukte leicht umschreiben kann:
#include <windows.h> const int KeyPressed = -32767; int CURSOR_X; int CURSOR_Y; int main() { while(true) { while(GetAsyncKeyState(VK_LSHIFT) == KeyPressed) { POINT cursorPos; GetCursorPos(&cursorPos); CURSOR_X = cursorPos.x; CURSOR_Y = cursorPos.y; Sleep(2); SetCursorPos(CURSOR_X,CURSOR_Y); mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); } Sleep(1); } return 0; }
-
Es könnte etwa so aussehen (ungetestet):
[quote="Chrises"] [cpp] #include <windows.h> const int KeyPressed = -32767; int CURSOR_X; int CURSOR_Y; int main() { while (1) { if (GetAsyncKeyState(VK_LSHIFT) == KeyPressed) do { POINT cursorPos; GetCursorPos(&cursorPos); CURSOR_X = cursorPos.x; CURSOR_Y = cursorPos.y; Sleep(2); SetCursorPos(CURSOR_X,CURSOR_Y); mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); } while(GetAsyncKeyState (VK_LSHIFT)!= KeyPressed); Sleep(1); } return 0; }
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Vielen Dank für die Antworten. Problem gelöst

@freakc++ Benutze das Buch : "jetzt lerne ich C++" ISBN 978-3-8272-4460-4 und meinen Nachbar der das schon mehrere Jahre macht :P. http://msdn.microsoft.com/en-us/library/default.aspx hilft auch oft weiter ;).
-
ich will ja nichts sagen aber goto considered harmful
-
Ist eigentlich nicht WinApi!
Goto und Sprungziele gehörten z.B. bei früheren BASIC-Compilern zum allgemeinen Werkzeug der Ablaufkontrolle. Und erzeugten dort schwer nachvollziehbaren Spagetti-Code. Kann man heute wirklich vermeiden! For-While-Switch-Break etc. reichen voll aus. Wenn nicht, stimmt etwas am Programmentwurf nicht! Wenn doch goto, dann bitte nur ans Ende einer Funktion und gut kommentieren.
-
berniebutt schrieb:
Ist eigentlich nicht WinApi!
Goto und Sprungziele gehörten z.B. bei früheren BASIC-Compilern zum allgemeinen Werkzeug der Ablaufkontrolle. Und erzeugten dort schwer nachvollziehbaren Spagetti-Code. Kann man heute wirklich vermeiden! For-While-Switch-Break etc. reichen voll aus. Wenn nicht, stimmt etwas am Programmentwurf nicht! Wenn doch goto, dann bitte nur ans Ende einer Funktion und gut kommentieren.das ist quatsch. schwer nachvollziehbarer spaghetti-code wird von schlechten und unfähigen programmiern erzeugt, nicht von goto. ich verwende goto manchmal, denn es kann manchmal durchaus helfen, um nicht unnötig aufgeblähten code zu erzeugen.
-
Die Schleife ist schrecklich, mit oder ohne goto.
Und wieso testest du mit == auf KeyPressed - du solltest eher mit(GetAsyncKeyState(key) & KeyPressed) != 0testen.
-
h@ck3R schrieb:
das ist quatsch. schwer nachvollziehbarer spaghetti-code wird von schlechten und unfähigen programmiern erzeugt, nicht von goto. ich verwende goto manchmal, denn es kann manchmal durchaus helfen, um nicht unnötig aufgeblähten code zu erzeugen.
Jo, ich habe nichts anderes gesagt. Du hast wahrscheinlich nie mit einem BASIC-Interpreter gearbeit, der nur goto zur Ablaufsteuerung kannte! Auch ich verwende manchmal noch goto, aber dann nur ans Ende einer Funktion. Anders habe ich keinen Überblick und Rücksprünge halte ich schlicht für unmöglich. daddeldu - fertig, das reicht.