Snake und C
-
Hi Leute,
Ich habe mich mal an einem Snake auf der Konsole
in C versucht, aber es hapert noch an diversen Baustellen^^In Code::Blocks bekomme ich folgendes Traceback:
34: 'true' undeclared
106: structure has no member named 'Size'
106: 'size' undeclared
107: incompatible type for argument 2 of SetConsoleCursorInfoMfG ::john::
-
Wieso fällt denn keinem etwas dazu ein?
Auf der msdn page steht, dass ein DWORD von der
Funktion gefordert ist:void change_cursor( DWORD size ){ CONSOLE_CURSOR_INFO cci; cci.Size = size; SetConsoleCursorInfo( GetStdHandle( STD_OUTPUT_HANDLE ),cci ); }
Doch auch wenn ich die Funktion so umforme, bekomme ich
trotzdem den Error: incompatible type for argument 2 of SetConsoleCursorInfo
Ich weiß hier nicht mehr weiter...MfG ::john::
-
Huhu,
ich verstehe nicht wie du auf cci kommst.
Der 2. Parameter will einen bool´schen Wert haben und du fütterst ihm mit einer Structure.
typedef struct _CONSOLE_CURSOR_INFO { DWORD dwSize; BOOL bVisible; /* Do you see? */ }CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
-
Worum es hier aber geht ist aber die Funktion:
BOOL WINAPI SetConsoleCursorInfo( __in HANDLE hConsoleOutput, __in const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo );
Die verlangt wohl ein struct als zweites Argument,oder?
MfG ::john::
-
Hab mich wohl da verschaut.
Die Funktion erwartet einen Pointer als 2. Parameter:
void change_cursor( DWORD size ){ CONSOLE_CURSOR_INFO* cci; /* Here... */ cci.Size = size; SetConsoleCursorInfo( GetStdHandle( STD_OUTPUT_HANDLE ),cci ); }
-
Danke schonmal!
Es lässt sich nun zumindest ohne die Zeilecci.Size = size;
Die verursacht folgenden Fehler:
error: request for meber 'Size' in something not a structure or union
MfG ::john::
-
Huhu,
freut mich.
Versuchs mal mit:
cci.dwSize = size;
-
Sorry, aber das funktioniert leider genauso wenig..
Auch jede Aktion mit 'Visible' schlägt fehl.MfG ::john::
-
Huhu,
ach du Backe. Ich sollte mich langsam schämen für meine Antworten.
Stichwort: struct-pointer.
void change_cursor( DWORD size ){ CONSOLE_CURSOR_INFO* cci; cci->dwSize = size; /* -> */ SetConsoleCursorInfo( GetStdHandle( STD_OUTPUT_HANDLE ),cci ); }
-
LOL?
bitte so:
void change_cursor( DWORD size ){ CONSOLE_CURSOR_INFO cci; cci.dwSize = size; SetConsoleCursorInfo( GetStdHandle( STD_OUTPUT_HANDLE ), &cci ); }
das was Sunny31 hier veranstaltet hat, führt zu einer Speicherzugriffsverletzung,
da in eine nicht-initialisierte Adresse geschrieben wird...
-
Ich danke euch beiden. Es lässt sich nun ohne Probleme ausführen ich melde
mich nochmal, wenn ich weiter bin.
-
Hmm,...
Nagut, wieder was dazu gelernt.
Danke!