Tømme datastrøm i C

Tags:    c++

Jeg har lavet et C program, men jeg har fået et lille problem, jeg ønsker at tømme datastrømmen fra stdin, da der muligvis vil være uønsked data på den. Men problemmet er at jeg ikke ved hvilken funktion jeg skal bruge til det, der burde ligge en funktions defination i stdio.h der kan bruges, men det eneste der tilnærmelses vis ligner det jeg skal bruge er fflush, men den er beregnet til filer. Og det er indput stream fra stdin jeg ønsker at tømme. Jeg har en gammel C bog, hvor der bliver nævnt en funktion kaldet flushall vis definition skulle ligge i stdio.h, men det gør den ikke, men det er jo også en gammel bog. Så mit spørgsmål er, er der nogle af jeg der kender en funktion, der kan tømme den stream der kommer fra stdin?

PS: Programmet skal afhvikles på et Gnu/Linux system.

mvh
Kristoffer



5 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Bare glem hvad jeg skrev :)


[Redigeret d. 17/10-05 15:50:38 af Søren]



En fil er en stream og stdin er en stream, og fflush arbejder netop på streams.

Men inden det får os til at bruge fflush(stdin); så lad os lige se hvad standarden skriver om fflush:

"7.19.5.2 The fflush function
Synopsis
#include <stdio.h>
int fflush(FILE *stream);
Description
If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined."

Med andre ord og på dansk, man kan ikke fflushe en input stream!

Jeg ved godt at der er nogen der vil hævde at det virker (hvordan man så definerer "virker").

Det er også muligt at det virker med nogle kompilere på windows men ikke virker med nogle (evt. de samme kompilere) på Linux.

Der giver os kun to muligheder:
1: Sikre at brugeren KUN trykker på de taster han/hun må og KUN når hun/han må.
2: Altid læse alt hvad brugeren måtte taste, og smide det bort man ikke ønsker.

Da brugere (normalt) er højt udviklede og intelligente skabninger, gør de stort set hvad de har lyst til.
Så der er kun mulighed nummer 2 tilbage.

Du bruger mulighed 2 ved at bruge fgets eller getline til alle læsninger og selv konvertere til int, float, etc.



tak for svaret. Men hvordan tildeler jeg de point jeg har sat på højkandt til dig?




Normalt ville den der svarer lave et svar og ikke en kommentar, så kunne du give ham point. Hvis den der har svarret og som du gerne vil tildele point kun har lavet en kommentar, beder du ham om at lave et svar, så du kan give point.

Men jeg samler ikke point, så jeg laver ikke svar.
Hvis problemet er løst, laver du selv et svar og accepterer det, så får du dine point tilbage og spørgsmålet bliver lukket.

Du kan få mere info om at læse fra stdin (og andre streams) her:
http://home20.inet.tele.dk/midgaard/tipc20050131.html



ok, tak for det



t