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.
Verwijderd
probeer dit eens:
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.
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?
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?
Je introduceert wel een bug overigens.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
[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.
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.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 2while (!cin.eof()) cin.get();
Verwijderd
Dit vond ik in de reference waar ik al eerder naar verwees:
Heb je hier misschien wat aan ?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.
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?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.
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