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 SetConsoleCursorInfo

    Code
    MSDN-Page

    MfG ::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 Zeile

    cci.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!


Log in to reply