Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » stdin leeren resultiert in deadlock

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 <
000
22.03.2010, 10:49 Uhr
~Däädlock
Gast


hi,

folgender code-schnipsel:


C++:
                 fgets(name, 127, stdin);
         //doSomething
         while((ch = getchar()) != EOF && ch != '\n'){continue;}



Wenn der Benutzer jetzt mehr als 127 zeichen eingibt, bleiben noch Zeichen im stdin stehen, die entferne ich dann mit der while-schleife. Soweit alles ok.

Wenn nun aber weniger als 127 Zeichen gelesen werden, dann erwartet die while das etwas eingeben wird. Wie kann ich das umgehen? Sowas wie clear(stdin) gibts ja nicht - bis auf das böse flush(stdin) was ein undefinierten zustand herbeiführt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.03.2010, 18:27 Uhr
0xdeadbeef
Gott
(Operator)


Eine Möglichkeit wäre

C++:
if(name[strlen(name) - 1] != '\n') {
  // fgets hat keine ganze Zeile eingelesen
}


...aber ich würde an deiner Stelle einfach die GNU-Funktion getline benutzen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


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: