Toon posts:

[C++] lezen van character zonder enter te geven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het volgende probleem.

Ik ben bezig met het programmeren van een shell (voor Linux).
Opzich begint alles goed vorm te krijgen (Pipen etc) gaat allemaal al redelijk goed.
Zoals nu lees ik gewoon een complete regel in en die ga ik hierna parsen.

Wat ik nu wil is het volgende.

Ik wil dat als ik pijltje omhoog of omlaag doe, dat ik door de voorgaande commando's kan wandelen.

Ik kan dit niet voor elkaar krijgen. Ik had zelf zo iets gedacht om per character input te lezen, en dan gewoon kijken of dit pijltje omhoog/omlaag is.
Opzich het lezen per character in C++ is geen probleem alleen moet je telkens wel een enter geven voordat hij verder gaat.

Hier stukje Pseudo code zoals ik denk dat het moet worden:

code:
1
2
3
4
5
6
7
8
9
invoerTeller = 0;
Doe totdat inputchar != enter
           wacht op invoer van het toetsenbord (1 teken en ga dan verder)  ///DEZE REGEL KAN IK NIET VOOR ELKAAR KRIJGEN !!!
           
           Als invoer is pijltje omhoog geef vorig commandoregel
           Als invoer is pijltje omlaag geef volgend commandregel
           anders 
               tmpBuffer[invoerteller] = gegeven character
               verhoog invoerTeller

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je OS doet dat. De runtime vraagt alleen maar om input, en als die er niet is dan blokt je OS de call totdat je op enter hebt gedrukt. Vaak kan het wel met wat platform specifieke functies zoals getch ()

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17-05 17:19

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

Non-blocking getch () is wat anders :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17-05 17:19
.oisyn schreef op vrijdag 12 november 2004 @ 17:52:
Non-blocking getch () is wat anders :)
Hoezoo ? Dat is toch precies wat ie wil of begrijp ik het nou helemaal verkeerd ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

vergelijk getch () en cin.get ()
getch () blokt voor één toetsaanslag, cin.get () blokt totdat er op enter gedrukt is. Cursor-toetsen uitlezen lukt niet met cin.get (), die worden namelijk door het OS afgehandeld voor de line input interface.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

.oisyn schreef op zaterdag 13 november 2004 @ 00:13:
vergelijk getch () en cin.get ()
getch () blokt voor één toetsaanslag, cin.get () blokt totdat er op enter gedrukt is. Cursor-toetsen uitlezen lukt niet met cin.get (), die worden namelijk door het OS afgehandeld voor de line input interface.
Is dat niet totaal afhankelijk van je terminal settings?

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-04 07:04
Heb je al naar de readline en history libraries gekeken? (zie man / info op je systeem) Deze packages zorgen vrij eenvoudig voor een goede manier van text invoer. Het gedrag is vergelijkbaar met de commando's die op een normale linux shell kunt gebruiken. Pijltje omhoog en omlaag is standaard al geïmplementeerd als vorige/volgende commando, als je naast readline ook van de history lib gebruik maakt.
Pagina: 1