[C++] cin.get resetten?

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

  • Captain N
  • Registratie: Maart 2001
  • Laatst online: 10-05-2024

Captain N

Back in NL. T_T

Topicstarter
We hebben een cin.get die ingevoerde characters inleest en daar gaan we iets mee doen. Alleen eerder in de code staan nog andere cin's, en daardoor komt er een enter als eerste character in die cin.get te staan. Dat is niet de bedoeling, en ik wil nu weten hoe ik dat kan voorkomen. Kan je op een of andere manier zorgen dat die cin.get leeg begint?

Specs: NES | M82 | (T)FC | SNES | BS-X | VB | N64 | 64DD | NGC | Q | Q GBP | G&Ws | GB(L) | GB(A) (SP) | GBM | DS(L) | Wii
Mijn foto's op Flickr.


  • whoami
  • Registratie: December 2000
  • Nu online
code:
1
cin.seekg(0)

denk ik.

https://fgheysels.github.io/


Verwijderd

Ik weet het zo niet uit mn hoofd, maar in deze reference is het ongetwijfeld te vinden.

Verwijderd

probeer dit eens:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream.h>
#include <conio.h>
#include <string.h>

void flushbuf(); \\ prototype voor de functie
void main() {
......
......
flushbuf();  \\ aanroep functie
cin.get (bla,10); \\ wat je gaat inlezen
}

void flushbuf() { \\ de eigenlijke functie
char k;    
 do 
   cin.get(k);  
 while (k!='\n');  \\ blijft inlezen tot hij geen newline teken meer tegenkomt
}

dat zou het moeten oplossen. :)

hoezo een bug? :)
Het is gewoon een feit dat als je iets inleest met cin.get() er een newline teken in de buffer blijft bijv.
code:
1
2
3
4
5
6
7
8
9
10
void main() {
char a[60],b[60],c[60];
cin.get(a,60);
cin.get(b,60);
cin.get(c,60);
cout << "\nDit is a: " << a;
cout << "\nDit is b: " << b;
cout << "\nDit is c: " << c;
getch();
}

Je typt bij a, b en c 'hallo' in

Output:
Dit is a: hallo
Dit is b:
Dit is c:

snap je wat ik bedoel? :)

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 24-08 22:38
Op woensdag 07 november 2001 23:59 schreef logik2001 het volgende:
code:
1
2
3
4
char k;    
do 
   cin.get(k)   
while (k!='\n');  \\ blijft inlezen tot hij een newline teken tegenkomt
Je introduceert wel een bug overigens. ;)

[edit]

buffer="farlane is lief\nfarlane is lief\n"

Zal dus niet geflushed worden. Volgens mij moet je dan lezen tot cin.eof()

iets van:
code:
1
2
while (!cin.eof())
    cin.get();

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Remenic
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:06
Op donderdag 08 november 2001 09:10 schreef farlane het volgende:

[..]

Je introduceert wel een bug overigens. ;)

[edit]

buffer="farlane is lief\nfarlane is lief\n"

Zal dus niet geflushed worden. Volgens mij moet je dan lezen tot cin.eof()

iets van:
code:
1
2
while (!cin.eof())
    cin.get();
Of jouw methode werkt weet ik niet, maar die andere werkt zeker wel. Gebruikte ik zelf ook wel eens. Je voert logik2001 z'n methode uit nadat je cin.get() gebruikt hebt. Dan weet je zeker dat er geen \n meer is. En zin.get() blijft lezen totdat er een \n is, dus twee newlines komen toch nooit in 1 cin.get() voor.

Verwijderd

Dit vond ik in de reference waar ik al eerder naar verwees:
basic_istream::ignore

basic_istream& ignore(streamsize count = 1, int_type delim = traits_type::eof());

The unformatted input function extracts up to count elements and discards them. If count equals numeric_limits<int>::max(), however, it is taken as arbitrarily large. Extraction stops early on end-of-file or on an element ch such that traits_type::to_int_type(ch) compares equal to delim (which is also extracted). The function returns *this.
Heb je hier misschien wat aan ?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 24-08 22:38
Op donderdag 08 november 2001 20:34 schreef Remenic het volgende:

En zin.get() blijft lezen totdat er een \n is, dus twee newlines komen toch nooit in 1 cin.get() voor.
Neuh, die versie van jouw extract gewoon 1 element. Als je tot een \n wilt lezen en die \n weggooien kun je beter getline(...) gebruiken. Maar de vraag was toch hoe je een buffer kunt flushen, niet hoe je een buffer tot \n kunt lezen en weggooien?
As je dat laatste wilt doen kun je inderdaad beter die versie van Sneech gebruiken.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1