Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » stdin leeren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
18.04.2004, 20:58 Uhr
kronos
Quotenfisch
(Operator)


hi!
ich steh' mal wieder auf der leitung...
ich bastel ein kleines text-basierendes UI, dabei habe ich folgendes problem:
es sollen so-und-so-viele zeichen der user-eingabe gelesen und gespeichert werden, der rest wird abgeschnitten. das geht wunderbar mit scanf, getline oder fgets oder so, allerdings sifft der eventuelle rest dann noch im stdin 'rum und stört dann bei der nächsten eingabe.
jetzt komm' ich einfach nicht drauf wie ich den stdin-buffer geleert bekomme!

--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.04.2004, 21:02 Uhr
Pablo
Supertux
(Operator)


Womit machst du die Eingabe? mit fgets? Oder gemischt? Soweit ich weiß, fgets leert stdin, wenn man fgets benutzt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 18.04.2004 um 21:02 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.04.2004, 22:06 Uhr
(un)wissender
Niveauwart


Einfach solange was in einen Buffer lesen und verwerfen bis stdin leer ist.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.04.2004, 23:13 Uhr
kronos
Quotenfisch
(Operator)



Zitat:
(un)wissender postete
Einfach solange was in einen Buffer lesen und verwerfen bis stdin leer ist.

aber wie stell' ich fest ob der buffer leer ist?
bis '\n' lesen ist nicht, weil ich nicht weiß ob er leer ist und er dann evtl. auf eine eingabe wartet, wo er's nicht soll...
naja, hat jetzt geklappt, aber ich hab' was neues (wird wieder ein thread der tausend fragen...):

C++:
// file ist ein (ifstream*)
    int len;
    char *buf;
    string data;
    
    file->seekg (0, ios::end);
    len= file->tellg();        
    file->seekg (0, ios::beg);    
    buf=new char[len];
    file->read(data,len);
    file->close();
    data=buf;
    delete buf;


lässt sich das nicht irgendwie eleganter regeln?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.04.2004, 19:30 Uhr
typecast
aka loddab
(Operator)



C++:
file->clear();


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)

Dieser Post wurde am 19.04.2004 um 19:30 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.04.2004, 09:11 Uhr
~Dave
Gast


fflush(stdin);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.04.2004, 10:32 Uhr
virtual
Sexiest Bit alive
(Operator)


@typecast
clear löscht nur die Errorflags des Streams; es macht keine Zeichen weg

@Dave
fflsuh(stdin) geht nicht, weil
1. stdin ist C, die Jungs hier arbeiten mit einem C++ Stream (edit: vergiss es: ich habe nicht richtig gelesen)
2. fflush(stdin) ist nicht protabel und funktioniert nicht oder nur bei Nischenprodukten wie zB Windows.

@kronos
der seekg ansatz funktioniert auch nur bedingt, weil man nicht davon ausgehen kann, daß jeder stream dies unetrstützt.

Ich würde es mal mit der readsome methode probieren...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 20.04.2004 um 11:14 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.04.2004, 10:34 Uhr
Pablo
Supertux
(Operator)


Was macht überhaupt das fflush(stdin)? Hab bei vielen Windof Sourcen gesehen, ich verstehe das einfach nicht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.04.2004, 10:44 Uhr
virtual
Sexiest Bit alive
(Operator)


fflush(stdin) tut wirklich nur unter Windows und tut dort das, was kronos eigentlich wollte. Ist aber eben unportabel, weil es eine MS spezifische Erweiterung vom fflush ist
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.04.2004, 10:52 Uhr
Pablo
Supertux
(Operator)


Aha, danke. (zum Glück habe ich das noch nie benutzt)
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 20.04.2004 um 10:53 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: