[C++] cin word niet gelezen?

Pagina: 1
Acties:

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
hoi mensen,

ik heb nogal een raar probleem met c++

ik heb de volgende code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;

void main () {
  int t;

  cout << "Record toevoegen? (0 om te stoppen)";
  cin >> t;
  while (t != 0) {
    cout << "Record toevoegen? (0 om te stoppen)";
    cin >> t;
  }
}


als ik dit compile en uitvoer krijg ik 1x de vraag 'record toevoegen' etc..
dan kan ik iets invoeren. Alleen daarna (dus binnen het loopje) krijg ik 1000x die vraag, alleen word de hele 'cin' overgeslagen....
ik heb dus niet de mogelijkheid om iets in te voeren

nb: dis dus de gestripte versie van een iets ingewikkelder programma, en ik weet dat in dit geval een do {} while (); beter is, maar er moet dus nog meer in.

This message was sent on 100% recyclable electrons.


Verwijderd

Heb je getest of de gestripte ook dezelfde bug bevat? Want met borland c++ builder werkt het gewoon.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

In VC++.NET 2003 werkt je code foutloos. In welke compiler en omgeving voer je het uit?

Professionele website nodig?


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
ik heb deze (gestripte en geposte) code getest en hier doet ie het dus niet....
(dwz: hij spamt me hele schermpje vol met die cout)

ik gebruik microsoft visual c++ 6
(helaas moet dat van school)

This message was sent on 100% recyclable electrons.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nogal wiedes, je controleert niet op foute invoer. Zodra de invoer fout is wordt de failbit in cin gezet en kun je niets meer invoeren totdat je de bit weer cleared

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
.oisyn schreef op 29 oktober 2004 @ 13:14:
Nogal wiedes, je controleert niet op foute invoer. Zodra de invoer fout is wordt de failbit in cin gezet en kun je niets meer invoeren totdat je de bit weer cleared
maar hoe komt het dan dat het bij die eerste 2 replies wel werkt???
ennueh.. failbit??
waar heb je het over? :S

This message was sent on 100% recyclable electrons.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

anders ga je gewoon even de documentatie van std::basic_istream lezen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
.oisyn schreef op 29 oktober 2004 @ 13:23:
anders ga je gewoon even de documentatie van std::basic_istream lezen
ja over dooddoeners gesproken...
ik ben nu sp6 aan't dl'en en ga nu eerst even proberen in knoppix.. als het onder een andere compiler wel werkt heeft het dus geen flikker met failbits te maken dacht ik zo

This message was sent on 100% recyclable electrons.


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 20-05 07:32
Hint: cin.clear()

Ook moet je nog de gegeven input weggooien, dit kan bijvoorbeeld met
code:
1
2
while (!(cin.peek() == '\n'))
    cin.ignore();


Je kunt met een while- lus controleren of de input goed is, met
code:
1
while(!(cin >> t))

[ Voor 8% gewijzigd door Jaap-Jan op 29-10-2004 13:29 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • igmar
  • Registratie: April 2000
  • Laatst online: 12-05 15:46

igmar

ISO20022

BasieP schreef op 29 oktober 2004 @ 13:27:
ja over dooddoeners gesproken...
ik ben nu sp6 aan't dl'en en ga nu eerst even proberen in knoppix.. als het onder een andere compiler wel werkt heeft het dus geen flikker met failbits te maken dacht ik zo
En d'r wel eens bij stilgestaan dan de iostream implementatie wel eens kan verschillen ? Geen enkele vorm van errorchecking is zowiezo vragen om problemen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

BasieP schreef op 29 oktober 2004 @ 13:27:
ik ben nu sp6 aan't dl'en en ga nu eerst even proberen in knoppix.. als het onder een andere compiler wel werkt heeft het dus geen flikker met failbits te maken dacht ik zo
Assumpties, assumpties, assumpties...

Het heeft sowieso geen flikker met compilers te maken, maar met verschillende iostream implementaties. Hier in MSVC++ 7.1 gaat het ook goed, totdat ik foute invoer geef, dan gaat het zoals jij zegt (een infinite loop met continu die ene regel output). Waarschijnlijk laat de implementatie die jij gebruikt die enter aan het eind van de invoer gewoon in de buffer staan (wat Japie_17 zei dus), een volgende read voor een int mislukt dus en wordt de failbit geset.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1