conio.h unter Linux

Direkte Linux-Programmierung, POSIX
nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

conio.h unter Linux

Beitrag von nufan » Mi Sep 17, 2008 8:15 pm

Hallo!
Ich denke, die Frage passt hier besser als in C/C++. Wenn ihr anderer Meinung seid, einfach verschieben :)
So, zum Problem: ich hab mitbekommen, dass ich conio.h unbedingt brauche. Google hat mir geholfen und ich hab eine für Linux passende Version runtergeladen und ins include-Verzeichnis kopiert. Danach hab ich das "ncurses"-Paket installiert, ohne die conio nicht funktioniert. Gut.
Dann wollte ich das an folgendem Programm testen:

Code: Alles auswählen

#include <stdio.h>
#include <conio.h>

int main ()
{

  printf ("1");
  getch ();

  clrscr ();

  printf ("2");
  getch ();
 
  return 0;

}
Und kompiliere so:

Code: Alles auswählen

$ g++ -lncurses -o a a.cpp
G++ gibt keine Warnung oder ähnliches aus. Das Ergebnis seht ihr jedoch hier:
Bild

Nach zwei Eingaben (getch () ) sieht die Konsole wieder normal aus und ich kann einen neuen Befehl eingeben. Jedoch ist von den printf's nichts zu sehen. Nun natürlich die Frage: Was mache ich falsch?

Lg

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: conio.h unter Linux

Beitrag von Dirty Oerti » Mi Sep 17, 2008 8:19 pm

Hm, verschwindet die Eingabezeile und evtl vorher geschriebenes, während du das Programm ausführst?

Wenn ja, dann würde ich spontan darauf tippen, dass ncurses seinen Dienst verrichtet.
Da du per ncurses allerdings keine Ausgaben machst, siehst du auch nichts.

Wobei ich mir keineswegs sicher bin, ob die Ausgaben per printf nicht danach zu sehen sein müssten..

*edit* Du sprichst von Nachforschungen, die dir eindeutig sagen, dass du conio.h brauchst. Vllcht würden Quellen helfen, zu verstehen, was du meinst... */edit*
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: conio.h unter Linux

Beitrag von nufan » Mi Sep 17, 2008 8:27 pm

DirtyOerti hat geschrieben:Wobei ich mir keineswegs sicher bin, ob die Ausgaben per printf nicht danach zu sehen sein müssten.
Das wäre möglich... was gibts da für Funktionen, mit denen ich das testen könnte?
DirtyOerti hat geschrieben:*edit* Du sprichst von Nachforschungen, die dir eindeutig sagen, dass du conio.h brauchst. Vllcht würden Quellen helfen, zu verstehen, was du meinst... */edit*
Ich muss Strings "manuell" einlesen und mit Enter abbrechen. :roll: Unter Windows würde das ungefähr so aussehen:

Code: Alles auswählen

#include <stdio.h>
#include <conio.h>

int main ()
{

  char string[ 50 ];
  int i, pruef=0;

  for (i=0; i<50 && pruef==0)
  {

    string[ i ] = getche ();

    if ( string[ i ] == 13)
      pruef=1;

  }

  return 0;

}
Und dazu brauch ich getche (), da getchar () Enter nicht erkennt. Oder hat jemand ne bessere Alternative? Jedoch keine Funktion wie fgets () oder wie die heißen. Es sollte nach dem selben Schema wie oben ablaufen.

Lg

____________

EDIT:
Ich hab den Code jetzt mal ein bisschen umgeschrieben:

Code: Alles auswählen

#include <iostream>
#include <conio.h>

using namespace std;

int main ()
{

  cout << "1" << endl;
  getch ();

  clrscr ();

  cout << "2" << endl;
  getch ();
 
  return 0;

}
Jetzt wird "1" ausgegeben und der Cursor in die nächste Zeile gesetzt. Wenn ich jedoch eine Taste drücke, ist's wieder vorbei --> "2" wird nicht ausgegeben. Außerdem wäre mir eine printf-Lösung lieber.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: conio.h unter Linux

Beitrag von Xin » Mi Sep 17, 2008 9:04 pm

nufan hat geschrieben:So, zum Problem: ich hab mitbekommen, dass ich conio.h unbedingt brauche.
Wozu?
nufan hat geschrieben:Nach zwei Eingaben (getch () ) sieht die Konsole wieder normal aus und ich kann einen neuen Befehl eingeben. Jedoch ist von den printf's nichts zu sehen. Nun natürlich die Frage: Was mache ich falsch?
Ich kann das nicht kompilieren, denn ich habe keine conio. Ich weiß auch nicht, inwieweit dieses conio da Mist baut.
Ich gehe mal davon aus, dass es keinen Mist baut, dann findest Du nicht eine normale Konsole vor, sondern vor dem Promt steht 12 - eben, was Du ausgibst.

Du schreibst in den Buffer - nicht in die Konsole. Du musst die Buffer ausschreiben: fflush( stout ); nach dem printf.

Das passiert automatisch, wenn printf() ein '\n'-Zeichen findet. Also schreib
printf( "1\n" );
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: conio.h unter Linux

Beitrag von nufan » Mi Sep 17, 2008 9:18 pm

Xin hat geschrieben:Wozu?
Siehe letzter Beitrag.
Xin hat geschrieben:Du schreibst in den Buffer - nicht in die Konsole. Du musst die Buffer ausschreiben: fflush( stout ); nach dem printf.

Das passiert automatisch, wenn printf() ein '\n'-Zeichen findet. Also schreib
printf( "1\n" );
So etwas dachte ich mir schon und habs bereits probiert. Mit dem selben Ergebnis wie ohne \n.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: conio.h unter Linux

Beitrag von fat-lobyte » Do Sep 18, 2008 8:06 am

nufan hat geschrieben:
Xin hat geschrieben:Wozu?
Siehe letzter Beitrag.
Aus deinem Beitrag geht nur hervor, dass du ein Zeichen einlesen willst. Das geht mit getchar() auch.

nufan, ich bitte dich, lass die Spielereien mit conio.h, ncurses oder sonstwas. Stattdessen solltest du eine echte GUI Lernen. Ich hatte beispielsweise auch vor, mein Programm mit ncurses zu schreiben, weil ich dachte das wäre. Davon bin ich ganz ganz schnell abgekommen, nachdem ich das ganze mal durchgedacht habe.
Lies dir die Dokumentation von ncurses durch. Die findest du, wenn du das Paket "libncurses-doc" installierst irgendwo in /usr/share/doc/libncurses-doc/html oder sowas. Alternativ einfach nach "ncurses tutorial" googeln, da findest du genug.
Haters gonna hate, potatoes gonna potate.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: conio.h unter Linux

Beitrag von nufan » Do Sep 18, 2008 1:17 pm

fat-lobyte hat geschrieben:Aus deinem Beitrag geht nur hervor, dass du ein Zeichen einlesen willst. Das geht mit getchar() auch.
Ich habe auch geschrieben:
nufan hat geschrieben:Ich muss Strings "manuell" einlesen und mit Enter abbrechen. :roll:
Und Enter kann ich mit getchar () nicht einlesen.
fat-lobyte hat geschrieben:Stattdessen solltest du eine echte GUI Lernen.
Ein GUI lernen? So wie Opengl oder Dx? Oder mehr wie SDL? Sry, kenn mich da nicht besonders aus...
fat-lobyte hat geschrieben:Ich hatte beispielsweise auch vor, mein Programm mit ncurses zu schreiben, weil ich dachte das wäre.
Wäre...?

Lg

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: conio.h unter Linux

Beitrag von fat-lobyte » Do Sep 18, 2008 1:21 pm

nufan hat geschrieben:
fat-lobyte hat geschrieben:Stattdessen solltest du eine echte GUI Lernen.
Ein GUI lernen? So wie Opengl oder Dx? Oder mehr wie SDL? Sry, kenn mich da nicht besonders aus...
Natürlich nicht - wenn du dich auskennen würdest, würdest du es ja nicht lernen müssen.
OpenGL/SDL und DirectX sind Grafik Bibliotheken, meist für 3D grafiken.
Ich meine Bibliotheken wie wxWidgets, GTK+, oder eben NCurses.
nufan hat geschrieben:
fat-lobyte hat geschrieben:Ich hatte beispielsweise auch vor, mein Programm mit ncurses zu schreiben, weil ich dachte das wäre.
Wäre...?

Lg
Weil ich dachte das das einfach wäre. Weit gefehlt.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: conio.h unter Linux

Beitrag von Xin » Do Sep 18, 2008 1:31 pm

nufan hat geschrieben:
fat-lobyte hat geschrieben:Stattdessen solltest du eine echte GUI Lernen.
Ein GUI lernen? So wie Opengl oder Dx? Oder mehr wie SDL? Sry, kenn mich da nicht besonders aus...
Bei gtk kann ich und redliner ggfs. behilflich sein.
Allerdings rate ich zu wxWidgets, auch wenn ich in wxWidgets noch keine Erfahrungen habe.

Wenn Du nur Dinge machst, in denen Du Dich besonders gut auskennst, dann musst Du viel Freizeit haben. :->
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Metamorph
Beiträge: 123
Registriert: Sa Jul 05, 2008 12:27 pm

Re: conio.h unter Linux

Beitrag von Metamorph » Sa Sep 20, 2008 11:20 pm

Ährm, soweit ich mich noch erinnern kann, habe ich unter Windows für getch() keine conio-header gebraucht.
Soviel ich noch weiss, kann man mit dieser Header nur die Schrift formatieren und färben?!

Antworten