PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : getch();



Christoph87
29-01-2004, 17:15
Hallo,
jetzt hätte ich mal eine konkrete Frage:

Ich versuche manche Windowsprogramm auf Linux umzustricken.

Unter diesen Programmen habe ich immer getch(); dafür verwendet, um irgendeine Tastatureingabe zu registrieren, damit das Programm weiterläuft.
D.h. das Programm bleibt an der Stelle so lange stehen, bis irgendeine Taste gedrückt wird.

Dieser Befehl scheint aber auch in der conio.h zu sein:D

Wie umschreibt man diese Funktion mit einem anderen Befehl, der in einer standard Header zu finden ist?

Christoph87
29-01-2004, 17:22
Oh nein, ich finde immer mehr Befehle, die ich immer verwendet habe und die nicht mehr funktionieren:(

Guckt mal hier:

http://c.conclase.net/Borland/funcion.php?fun=getch


Leider benutze ich auch gotoxy(); und clrscr();


Wie kann ich diese Funktionen mit den Standardbefehlen ausdrücken?

Bitte helft mir....

peschmae
29-01-2004, 17:46
Ncurses ist schon richtig.

Leider hast du die Suchfunktion nicht benutzt. Sonst hättest du das da gefunden: http://www.mrunix.de/forums/showthread.php?s=&threadid=33875&highlight=getch

(Ich hab einfach nur nach getch gesucht - am falschen Suchwort deinerseits wirds also nicht gelegen haben. Bei anderen Sachen ist dann jeweils das das Problem)

MfG Peschmä

Christoph87
29-01-2004, 17:56
Ja, nächstesmal benutz ich die Such-Funktion.

Ich habe die curses.h unter /usr/include/ abgelegt, es gibt unter KDEvelop allerdings Probleme, bitte schaut nochmal in den anderen thread zu der cprintf, da hab ich die Fehlermeldungen hingeschrieben.

Christoph87
29-01-2004, 18:13
Ich hab jetzt die ncurse von meiner SuSE CD installiert und Header und Bibliotheken sind jetzt wohl alle drauf.

Jetzt hab ich folgendes geschrieben:

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream.h>
#include <stdlib.h>
#include <curses.h>

main()
{
cout << "Hello, World!" << endl;
int getch(void);

return 0;
}



Ich meine, alles richtig gemacht zu haben, aber trotzdem funktioniert das so nicht, weshalb?

peschmae
29-01-2004, 19:35
Weil du nicht alles richtig machst *ggg*

Zuerst mal vielen Dank dafür, dass du mich dazu gebracht hast mal was mit ncurses zu machen. Naja. Suchen kann ich offenbar schneller als du - ich hatte nicht mehr als 10 Minuten (obwohl ich nicht wirklich gut C++ kann) um ein entsprechendes Programm zum laufen zu bringen.
u.a. indem ich unten auf der Seite (der Link vom anderen Thread) auf einen Link geklickt habe.



#include <iostream>
#include <stdlib.h>
#include <curses.h>

int main()
{
initscr();
cbreak();
echo();
int i = getch();
endwin();

std::cout << (char)i << std::endl;

return 0;
}


#include <iostream.h> ist nicht C++-üblich und veraltet. Üblich ist #include <iostream> und dann jeweils entweder "using namespace std" in die Datei schreiben oder bei cout/endl/cin jeweils ein std:: vorne dran hängen.

Was übrigens auch geht ist sowas:


char c;
std::cin >> c;


Standard-C++ - ganz ohne ncurses oder sonstige Zusatzlibs. Erfordert allerdings ein Enter nach der Eingabe. Aber darum kommt man sicher auch irgendwie herum...
Naja, vielleicht auch nicht.

MfG Peschmä

Christoph87
29-01-2004, 19:42
Hmm, danke für die antwort, aber ich kann eigentlich nicht gerade sagen, dass das funktioniert:


gmake all-recursive
gmake[1]: Entering directory `/home/christoph/cpp/test3'
Making all in test3
gmake[2]: Entering directory `/home/christoph/cpp/test3/test3'
if g++ -DHAVE_CONFIG_H -I. -I. -I.. -Wnon-virtual-dtor -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wwrite-strings -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -O0 -g3 -Wall -fno-exceptions -fno-check-new -MT main.o -MD -MP -MF ".deps/main.Tpo" \
-c -o main.o `test -f 'main.cpp' || echo './'`main.cpp; \
then mv -f ".deps/main.Tpo" ".deps/main.Po"; \
else rm -f ".deps/main.Tpo"; exit 1; \
fi
/bin/sh ../libtool --silent --mode=link --tag=CXX g++ -Wnon-virtual-dtor -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wwrite-strings -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -O2 -O0 -g3 -Wall -fno-exceptions -fno-check-new -o test3 main.o
main.o(.text+0x15): In function `main':
/home/christoph/cpp/test3/test3/main.cpp:27: undefined reference to `stdscr'
main.o(.text+0x1a):/home/christoph/cpp/test3/test3/main.cpp:27: undefined reference to `wgetch'
collect2: ld returned 1 exit status
gmake[2]: Leaving directory `/home/christoph/cpp/test3/test3'
gmake[2]: *** [test3] Fehler 1
gmake[1]: Leaving directory `/home/christoph/cpp/test3'
gmake[1]: *** [all-recursive] Fehler 1
gmake: *** [all] Fehler 2
*** fehlgeschlagen ***

peschmae
29-01-2004, 20:15
Du musst dein Programm gegen die Libcurses linken. Hast du die Optionen entsprechend eingestellt?

Manuell kompilieren geht so:
g++ test.cpp -o test -lncurses

MfG Peschmä

anda_skoa
29-01-2004, 22:32
Original geschrieben von peschmae
Du musst dein Programm gegen die Libcurses linken. Hast du die Optionen entsprechend eingestellt?


Ich glaube unter Projekt->Optionen->Linker Optionen -lncurses eintragen.

Ciao,
_