2 verschiedene schreibweisen
-
hallo,
ich habe da mal wieder eine frage:
weiter unten sind 2 quelltexte welche beide das gleiche machen und auch beide funktionieren, glaube ich jedenfalls. sie unterscheiden sich allerdings in einer zeile, und die schreibweise aus dem oberen quelltext ist mir bisher unbekannt und auch etwas unverständlich. dazu kommt dann noch, warum wird da bei den beiden variablen jeweils noch eins abgezogen??
wer kann mir das erklären??#include <windows.h> void cursor_pos(int x, int y) { HANDLE console; COORD position={(x-1),(y-1)}; // eigentlich geht es mir nur um diese zeile console=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(console,position); }
# include <windows.h> int gotoxy(int x, int y) { HANDLE console; COORD position; console = GetStdHandle( STD_OUTPUT_HANDLE ); position.X = x; // und um diese position.Y = y; // und diese SetConsoleCursorPosition(console, position); return 0; }
vielen dank im voraus,
Sternenstaub
-
Ich kennen die WinAPI nicht und deshalb weiß ich nicht, wie COORD deklariert ist, sieht aber nach einem struct aus.
Wenn das so ist, dann ist COORD position={(x-1),(y-1)}; die Deklaration der Variable position und die Zuweisung mit dem Werten x-1 und y-1. Wieso das funktioniert? Weil structs kann man auch so initialisieren, wobei x-1 in X gespeichert wird und y-1 in Y, da X vor Y deklariert wurde.
position.X = x; position.Y = y;
somit weist man explizit einer Membervariable von position einen Wert zu. Das ist keine Intialisierung mehr sonder Benutzung der Variable.
-
Sternenstaub schrieb:
warum wird da bei den beiden variablen jeweils noch eins abgezogen??
Die beiden Codes sind nicht äquivalent. Entweder man zieht 1 bei beiden ab, oder bei keinem.
-
Shade Of Mine schrieb:
Sternenstaub schrieb:
warum wird da bei den beiden variablen jeweils noch eins abgezogen??
Die beiden Codes sind nicht äquivalent. Entweder man zieht 1 bei beiden ab, oder bei keinem.
Genau, also machen die beiden Funktionen auch nicht das gleiche.
COORD ist wiefolgt deklariert:
typedef struct _COORD { // coord. SHORT X; // horizontal coordinate SHORT Y; // vertical coordinate } COORD;
Bei der ersten Version werden gleich beide member initialisiert. Warum noch eins abgezogen wrid kann ich nicht sagen, ist Auslegungssache.
-
ich weiß, daß die beiden codes nicht HAARGENAU das gleich machen. beide funktionen sollen allerdings den cursor auf dem bildschirm positionieren, mir ging es in meiner frage auch darum warum in dem oberen code 1 abgezogen wird??
ich könnte mir vorstellen, daß der index der zeilen und spalten bei 0 und nicht bei 1 beginnt. liege ich damit richtig oder ist es wahrscheinlicher, daß es einen anderen grund hat??grüße,
Sternenstaub
-
Da liegst du wahrscheinlich richtig. Musst die fragen, die die Funktionen geschrieben haben