Avatar billede kbhadsten Nybegynder
27. oktober 2004 - 10:57 Der 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?

min google.com søgninger gav ikke rigtigt noget.
Avatar billede kbhadsten Nybegynder
27. oktober 2004 - 11:14 #1
forresten så bruger jeg Dev-C++ v4.9.8.0
Avatar billede kbhadsten Nybegynder
27. oktober 2004 - 14:26 #2
fandt selv ud af problemet. getline() og gets() for den sags skyld, virker ikke når der før dem har været en cin >>, problemet er løst!
Avatar billede narrr Nybegynder
27. oktober 2004 - 22:13 #3
...men det kan den godt hvis du tømmer bufferen.
C-way:
fflush(stdin);

C++-way:
cin.ignore(INT_MAX, '\n');
Avatar billede bertelbrander Novice
28. oktober 2004 - 01:03 #4
Man kan IKKE flush'e en input stream.
Avatar billede narrr Nybegynder
28. oktober 2004 - 08:29 #5
Det vidste jeg du ville sige:) Hvad er det så jeg gør med cin.ignore?
Avatar billede bertelbrander Novice
28. oktober 2004 - 19:52 #6
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.
Avatar billede narrr Nybegynder
28. oktober 2004 - 21:05 #7
Okay, tak.
Avatar billede deadmez Nybegynder
03. november 2004 - 09:56 #8
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....
Avatar billede narrr Nybegynder
03. november 2004 - 11:57 #9
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.
---
Avatar billede bertelbrander Novice
03. november 2004 - 21:46 #10
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester