27. oktober 2004 - 10:57Der er
9 kommentarer og 1 løsning
Tømme keyboard buffer!!
Hej Eksperten.dk
Jeg har et problem med en getline(cin, navn) funktion i C++
programmet springer simpelthen bare over spørgsmålet, hvilket ikke er så heldigt! Jeg ved ikke om det er noget man bare lige gør, men jeg ville bare lige høre om der bar nogen der kunne fortælle mig hvordan man tømmer keyboard bufferen?
Det jeg ville sige var at man ikke kan bruge fflush med en input stream.
Din ignore skipper et antal karakterer indtil den møder en '\n' som den også skipper. Det er jo fint hvis man ved at der står netop dette og venter i bufferen.
Men hvis: 1: Bufferen er tom, eller der ikke er en '\n' i bufferen vil ignore vente på at brugeren trykker på enter. 2: Hvis der er mere end 1 linie i bufferen vil ignore kun fjerne den første.
bertelbrander.... jeg har lige afprøvet fflush(stdin); på mit lille kartoteks program... og det kunne da godt cleare keyboardbufferen..... havde næsten det samme problem som kbhadsten....
Det er ikke defineret hvad der skal ske når man flusher en input-stream!
--- 7.19.5.2 The fflush function Synopsis #include <stdio.h> int fflush(FILE *stream);
Description Ifstream 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. ---
Problemet er at fflush(stdin) "virker" på nogle platforme med nogle kompilere og ikke på andre platforme og/eller andre kompilere.
Hvis du er helt sikker på at: 1: fflush(stdin) gør det du ønsker, og kun det du ønsker på din platform. 2: Dit program aldrig skal køre på andre platforme.
Ser jeg ingen problem i at bruge fflush(stdin). Jeg har dog aldrig lavet et program hvor disse betingelser var opfyldt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.