Gibt es sowas auch für Linux, und wie kann ich dann OS entsprechend die Befehle ausführen lassen? geht das mit
Code: Alles auswählen
#ifdef Win32
gotoxy(2,3);
#ifdef Linux
BEFEHLxy(2,3);
Code: Alles auswählen
#ifdef Win32
gotoxy(2,3);
#ifdef Linux
BEFEHLxy(2,3);
Code: Alles auswählen
printf("\0x1B[%d;%dH", zeile, spalte );
Ich würde dazu raten, denn es lohnt sich nicht, diese Entscheidung zur Laufzeit zu treffen. Das OS wechselt üblicherweise ja nicht, während das Programm läuft.^^naums hat geschrieben:gehen die unter Windows, und wie unterscheide ich im CODE das OS? durch ifdef???
Welche möglichkeiten gibts denn noch? Und wie verwende ich schlauerweise den #ifdef Befehl?Ich würde dazu raten, denn es lohnt sich nicht, diese Entscheidung zur Laufzeit zu treffen. Das OS wechselt üblicherweise ja nicht, während das Programm läuft.^^
Code: Alles auswählen
// irgendwo im Code
#ifdef _WIN
tueDasunterWindows();
#endif
#ifdef _LINUX
tueDasunterLinux();
#endif
// wie die genauen Defines lauten weiß ich im Moment leider nicht, du kannst dir aber nat. auch eigene definieren
// wenn du wie oben unterschiedliche Funktionen verwendest musst du auch daran denken, dass die jeweiligen Funktionen NUR bei "ihrem" OS eingebunden werden dürfen. Es wäre also klüger allgemeingültige Funktionen zu schreiben ("tueDas()") und IN den Funktionen dann die Unterscheidung WIndows/Linux zu treffen
Code: Alles auswählen
void movecur(int x, int <)
{
#ifdef _WIN
gotoxy(x,y);
#endif
#ifdef _LINUX
printf(\033[SpalteX);
printf(\033[ZeileY);
#endif
}
Ich glaube nicht, dass das funktioniert.Code: Alles auswählen
void movecur(int x, int <) { #ifdef _WIN gotoxy(x,y); #endif #ifdef _LINUX printf(\033[SpalteX); printf(\033[ZeileY); #endif }
Code: Alles auswählen
printf("\033[%dG", x);
printf("\033[%dH", y);
Code: Alles auswählen
void movecur(int x, int y)
{
#ifdef _win32
gotoxy(x,y);
#endif
#ifdef _linux
printf("\033[%dG", x);
printf("\033[%dH", y);
#endif
}
Man könnte das dann auch noch etwas schöner schreiben (Außerdem fällt mir gerade auf das die Preprozessoranweisungen eingerückt sind, was nicht erlaubt ist. Die Raute muss immer am Anfang der Zeile stehten. Alles andere darf eingerückt sein):hofian hat geschrieben:Zusammengefasst müsste es dann so aussehen:
Code: Alles auswählen
void movecur(int x, int y)
{
#if defined(_WIN32)
gotoxy(x,y);
#elif defined(linux) || defined(__linux)
printf("\033[%d;%dH", y, x);
#else
# error "Platform not supported"
#endif
}
Code: Alles auswählen
//------------------------------------------------------------------------------
/// Move the cursor
///
/// @note The top left corner has the coords (1,1)
///
/// @param x x-coord of new position
/// @param y y-coord of new position
void movecur(int x, int y);
Code: Alles auswählen
//------------------------------------------------------------------------------
void movecur(int x, int y)
{
gotoxy(x,y);
}
Code: Alles auswählen
//------------------------------------------------------------------------------
void movecur(int x, int y)
{
printf("\033[%d;%dH", y, x);
}