🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #7988

Re: [c] eigen getline vereist soms een extra enter voordat hij werkt

#7988
From: Sven Vermeulen
Date: Thu, 11 Jul 2002 11:00
51 lines
3083 bytes
On Thu, 11 Jul 2002 09:22:19 GMT, Luc Kumps <NOkumpsSPAM@pandora.be> wrote:
>  1. 's' wordt niet getermineerd met een 0. Is dat geen vergetelheid?

Ja, kweetniet eigenlijk, met of zonder extra
	s[j] = '\0';
geeft geen verschil.

>  2. de oproeper wordt niet op de hoogte gebracht van een EOF conditie!

OOoh... 't is een programma'ke om wa te oefenen op struct's dus het is zo erg
nog niet. Maar ik zal je raad zeker in gedachten houden als ik later een
iets meer belangrijk (i.e. meer gebruikers dan ik alleen) programma schrijf
:)

>  3.  misschien kun je beter gebruik maken van
>  
>    if (NULL==fgets(s,lim,stdin)) {
>      // EOF processing???
>      // return empty string
>      s[0] = 0;
>    }
>    else {
>      // Bij fgets moet je wel zelf het newline character weer uit de buffer
>  halen, bv met
>      if (strlen(s)>0)
>        s[strlen(s)-1] = 0;
>    }

Thx. Heb ik geprobeerd, maar ging niet beter. het is wel interessantere code
(i.e. iets meer leesbaar/begrijpelijk) dus blijf ik die code gebruiken.

fgets... tjah, ik wou eerst gets gebruiken maar dat was niet "safe" volgens
de compiler:

the `gets' function is dangerous and should not be used.

fgets is blijkbaar een betere keuze. Tx again.
 
Nu, ik heb het probleem opgelost door enkel "while(getchar() != '\n');" te
plaatsen voor de getline's van de desbetreffende variabele, wat het programma
succesvol ten einde brengt. Het is echter niet echt "mooi" om dat te doen.
fflush(stdin) werkt niet op dat vlak. Het komt telkens voor na een scanf
(zoals ik eigenlijk al moest weten wegens de vorige posting).

Mijn conclusie: ofwel scanf gebruiken in combinatie met dien while-lus, ofwel
altijd fgets en dan manueel de variabele omzetten. Misschien dat dat laatste
interessanter is om fouten op te vangen (ingave van karakters bij cijfers
ofzo).

Mvg,
	Sven Vermeulen
Technical Details
Message-ID: <3zdX8.2969$QS3.625@afrodite.telenet-ops.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!sn-xit-08!supernews.com!pd2nf1so.cg.shawcable.net!residential.shaw.ca!newsfeed4.cidera.com!newsfeed1.cidera.com!Cidera!DirecTVinternet!DirecTV-DSL!newsfeed-west.nntpserver.com!hub1.meganetnews.com!nntpserver.com!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <5LbX8.2783$QS3.541@afrodite.telenet-ops.be> <f7cX8.2831$QS3.568@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,e8f39528eabe5a61
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2002-07-11 04:07:31 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!sn-xit-08!supernews.com!pd2nf1so.cg.shawcable.net!residential.shaw.ca!newsfeed4.cidera.com!newsfeed1.cidera.com!Cidera!DirecTVinternet!DirecTV-DSL!newsfeed-west.nntpserver.com!hub1.meganetnews.com!nntpserver.com!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
Newsgroups: be.comp.programming
From: Sven Vermeulen <svenPUNTJEvermeulen@rug.ac.be>
Subject: Re: [c] eigen getline vereist soms een extra enter voordat hij werkt
References: <5LbX8.2783$QS3.541@afrodite.telenet-ops.be> <f7cX8.2831$QS3.568@afrodite.telenet-ops.be>
User-Agent: slrn/0.9.7.4 (Linux)
Lines: 52
Message-ID: <3zdX8.2969$QS3.625@afrodite.telenet-ops.be>
Date: Thu, 11 Jul 2002 11:00:15 GMT
NNTP-Posting-Host: 213.224.137.116
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1026385215 213.224.137.116 (Thu, 11 Jul 2002 13:00:15 MET DST)
NNTP-Posting-Date: Thu, 11 Jul 2002 13:00:15 MET DST
Organization: Telenet Internet