April 20, 2005
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
Har fått en laboration i skolan där man ska göra ett blackjack spel.
Jag har nästan gjort klart spelet nu, men behöver fixa så att när man ska satsa pengar ska man kunna skriva fel utan att programmet börjar loopa.
Det funkar att satsa olika valutor, men om man skriver in en bokstav så börjar programmet loopa. Någon som vet hur man gör för att fixa detta?
Här är den del av koden där inmatningen sker:
double satsa, kredit = 100;
do{
cout << "Du satsar $";
cin >> satsa;if (satsa < 1)
cout << "Du satsade inga pengar!n";
else if (satsa > kredit)
cout << "Du har inte sx86 mycket pengar!n";
}while(satsa < 1 || satsa > kredit);
Tacksam för hjälp!
April 20, 2005
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
July 28, 2003
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
Problemet är att cin inte är så bra på att hantera inmatning av nummer direkt. När du matar in något annat än en siffra kommer cin gå in i ett "fail state". Du kan inte läsa in något mer förrän du har "nollställt" cin ('cin >> satsa;' kommer returnera direkt utan att läsa in något, därav loopen). Men det räcker inte med det, du måste också bli av med tecknet/tecknen som inte är siffror, eftersom de fortfarande finns kvar.
Alltså, efter "cin >> satsa;" bör du göra något i stil med:
if (!cin) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), 'n');
}
Det hela är ganska bra beskrivet här:
http://www.augustcouncil.com/~.....otips.html
Personligen tycker jag det hela är ganska fult och skulle rekommendera att du läser in nummer på något annat sätt. Jag vet dock att detta är standardsättet som beskrivs i böcker, lite synd eftersom man då förr eller senare åker på problem som detta.
April 20, 2005
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
Okej, tack så mycket!
Ska testa och se ifall det fungerar.
dae wrote: Personligen tycker jag det hela är ganska fult och skulle rekommendera att du läser in nummer på något annat sätt. Jag vet dock att detta är standardsättet som beskrivs i böcker, lite synd eftersom man då förr eller senare åker på problem som detta.
Vad finns det för andra sätt som man kan mata in nummer på?
1 Guest(s)
![sp_Information](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_Information.png)