Toon posts:

[C] fgets en een tab

Pagina: 1
Acties:

Verwijderd

Topicstarter
hey, ik zit met een probleem...
Ik ben met een programma in C bezig en ik gebruik fgets.
Is het mogelijk om een lijn, die ik met fgets inlees, af te sluiten door op de tab te drukken in plaats van door te ENTERen?
heb dit nodig om een file-completionfunctie te implementeren in mijn eigen shell.

Verwijderd

Topicstarter
omdat het een taak voor school is, en dit niet mocht...

  • igmar
  • Registratie: April 2000
  • Laatst online: 29-06 18:56

igmar

ISO20022

Verwijderd schreef op 29 October 2003 @ 09:38:
hey, ik zit met een probleem...
Ik ben met een programma in C bezig en ik gebruik fgets.
Is het mogelijk om een lijn, die ik met fgets inlees, af te sluiten door op de tab te drukken in plaats van door te ENTERen?
heb dit nodig om een file-completionfunctie te implementeren in mijn eigen shell.
Nope, niet binnen ANSI C. Dit soort grappen worden door de terminal lib afgehandled, en ANSI C kent dat hele begrip eigenlijk niet. fgets leest gewoon tot een \n, wil je dit anders zal je die functie zelf moeten implementeren.

De code uit de libc halen en veranderen is de snelste methode :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

wil je dit anders zal je die functie zelf moeten implementeren.
wat dus een probleem wordt, aangezien het OS het van je overneemt tot je op de enter hebt gedrukt, en daar zit het hele probleem. Als je handmatig chars inleest met getc () dan kom je daar ook niet omheen

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.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
.oisyn: Als je handmatig chars inleest met getc () dan kom je daar ook niet omheen
Humz, wat bedoel je hiermee?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat de console default linebuffered is. Als je een char inleest van stdin met een van de lees functies, en de buffer is leeg, dan schakelt de console over naar line input mode. Dat wordt pas afgesloten als je op enter drukt, en nadat je dat gedaan hebt wordt de hele line in de buffer geplaatst. Vervolgens pikt je leesfunctie (getc, fgets, whatever) daar een aantal chars uit.

Onder windows kun je dit uitschakelen met SetConsoleMode (), geen idee hoe het onder linux werkt.

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.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
.oisyn: buffered
Ok, maar das dus default. Daar valt wel om heen te werken: 3.2 How can I read single characters from the terminal?

Ik hoop trouwens wel dat de TC in een ander vak nog iets over software reuse leert ;) .

[ Voor 24% gewijzigd door mbravenboer op 29-10-2003 14:01 ]

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

De gedachte achter mijn eerste opmerking was dat het niet met ANSI C kon, en dat je dus OS specifieke functionaliteit ervoor nodig had :)

Onder windows kun je het oplossen met de Win32 API functie SetConsoleMode ()

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.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
.oisyn: De gedachte achter mijn eerste opmerking was dat het niet met ANSI C kon, en dat je dus OS specifieke functionaliteit ervoor nodig had :)
Maar het is gelukkig wel allemaal POSIX volgens mij :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Windows is alleen niet POSIX :P

Met getch () zou je het ook wel zelf kunnen implementeren overigens, dat wordt ook wel widely ondersteund

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.


  • igmar
  • Registratie: April 2000
  • Laatst online: 29-06 18:56

igmar

ISO20022

mbravenboer schreef op 29 oktober 2003 @ 14:33:
Maar het is gelukkig wel allemaal POSIX volgens mij :) .
De functies om de console op unbuffered te zetten niet helaas, en daar heeft C niks voor. Dus wat dat betreft heb je een probleem...

Ik maak ik zulke gevallen een dir osdep aan, met daarin subdirs voor elk te porteren OS, en met wat makefile magie kun je dan automatisch de juiste dirs included.

[ Voor 22% gewijzigd door igmar op 30-10-2003 09:27 ]


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
igmar: [POSIX] De functies om de console op unbuffered te zetten niet helaas
Ik ben absoluut geen expert op dit gebied, maar voor zover ik het kan zien bevindt alle functionaliteit die in dit voorbeeld zich toch echt in POSIX. Wat ontbreekt er dan?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Toen ik 'man tcgetattr' deed zag ik nergens POSIX staan, terwijl dat er meestal toch wel bij staat als het ook POSIX is

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.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Terminal I/O is een essentieel onderdeel van POSIX. Google maar eens op POSIX en tcgetattr: voorbeeldje.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1