Archief - c++ cin (console applicatie)

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Soulless

Legacy Member
Hey

code: (niet volledig maar genoeg om mijn vraag te snappen denk ik)

void inzetControle(int);
int inzet=0;

cout << "Hoeveel wenst u in te zetten? (25 tot 250 euro): ";
cin >> inzet;
inzetControle(inzet); // controlefunctie, die kijkt of de inzet correct is

Alles werkt prima tot dat de user bv een char/string ingeeft bij inzet. Dan crashed (endless loop) inzetControle(inzet); wat ook normaal is denk ik omdat hij een int verwacht?

Is er een manier om de user te "forceren" een int als cin in te geven?

Ik heb nog maar 5 weken programmeer kennis dus sorry als het een domme vraag is :)

MVG

MAXXUR

Legacy Member
implementatie van uw inzetControle gaat hier vrij essentieel zijn, toon die ens

Soulless

Legacy Member
void inzetControle(int inzet)
{
while ((inzet < 25) || (inzet > 250))
{
cout << "U moet een bedrag inzetten tussen 25 en 250 euro." << endl;
cout << "Hoeveel wenst u in te zetten? (25 tot 250 euro): ";
cin >> inzet;
}
}

bedoel je dat?

Deadangel

Legacy Member
Ik denk dat ge trouwens een int functie moet gebruiken.

Dus int inzetcontrole.
& dan uiteindelijk zegt; return inzet;

Want anders zijt ge denk ik ni veel met uw functie.
Maar soit.
De oplossing van uw probleem ken 'k percies niet echt.

Probeer eens;

while (((int)inzet < 25) || ((int)inzet > 250))

Bv202

Legacy Member
Ik weet niet of er betere oplossingen zijn (waarschijnlijk wel), maar dit werkt wel :)

Die crash heeft niets met u functie te maken, alleen met het feit dat ge probeert tekst in een integer te plaatsen.

Een mogelijke oplossing is de user input in een string zetten, en die dan converteren naar een integer. Stel dat de gebruiker letters in gaat typen, zal het resultaat 0 zijn.

Voorbeeld:

Code:
#include <iostream>
#include <string>

using namespace std;

void inzetControle(int);

int main()
{
	string inzet;
	int resultaat=0;
	cout << "Hoeveel wenst u in te zetten? (25 tot 250 euro): ";
	cin >> inzet;

	resultaat = atoi(inzet.c_str()); // atoi zet een string om naar een integer

	if (resultaat != 0) 
            inzetControle(resultaat);

    return 0;
}

void inzetControle(int inzet) // deze functie moet ge bewerken op dezelfde manier als hierboven. Het omzetten naar integer kan misschien beter in de functie zelf gedaan worden.
{
	while ((inzet < 25) || (inzet > 250))
		{
			cout << "U moet een bedrag inzetten tussen 25 en 250 euro." << endl;
			cout << "Hoeveel wenst u in te zetten? (25 tot 250 euro): ";
			cin >> inzet;
		}
}

Soulless

Legacy Member
Deadangel zei:
Ik denk dat ge trouwens een int functie moet gebruiken.

Dus int inzetcontrole.
& dan uiteindelijk zegt; return inzet;

Want anders zijt ge denk ik ni veel met uw functie.
Maar soit.
De oplossing van uw probleem ken 'k percies niet echt.

Probeer eens;

while (((int)inzet < 25) || ((int)inzet > 250))

Wrm ben ik niet veel met mijn functie?

Die kijkt gewoon of de user een getal tussen 25 en 250 ingeeft en zolang dat niet gebeurd vraagt die een correcte input.

en als ik (int)inzet ga doen, ga die mijn char omzetten naar een int waarde wat ook niet de bedoeling is :)

maar toch bedankt :p

Soulless

Legacy Member
Hey bedankt BV202, daar kan ik inderdaad al mee werken :d

Ik ga direct eens proberen se :)

Deadangel

Legacy Member
Soulless zei:
Wrm ben ik niet veel met mijn functie?

Die kijkt gewoon of de user een getal tussen 25 en 250 ingeeft en zolang dat niet gebeurd vraagt die een correcte input.

en als ik (int)inzet ga doen, ga die mijn char omzetten naar een int waarde wat ook niet de bedoeling is :)

maar toch bedankt :p
Stel
ik geef eerst: 8373287328 in.
Da zal te veel zijn, dus ge gaat in uw functie, en ge vraagt het nog eens.
Nu voer ik 5 in.
Dan moet ge die 5 'returnen' naar uw main.

Dus, zoiets;

resultaat = inzetControle(inzet);

Maar dan is da geen void meer, maar een int.

Bv202

Legacy Member
Deadangel zei:
Stel
ik geef eerst: 8373287328 in.
Da zal te veel zijn, dus ge gaat in uw functie, en ge vraagt het nog eens.
Nu voer ik 5 in.
Dan moet ge die 5 'returnen' naar uw main.

Dus, zoiets;

resultaat = inzetControle(inzet);

Maar dan is da geen void meer, maar een int.

Zelfs met die methode vind ik het maar raar gedaan eerlijk gezegd...

De bedoeling van die functie is de inzet te controleren, niet om die te controleren en opnieuw te blijven vragen. Beter is in de main() functie die while te gebruiken en in de functie enkel controleren of de invoer geldig is of niet en een boolean returnen.

Wolverine__1

Legacy Member
Je kan uw invoer(die je als string inneemt) best eerst checken of er andere karakters dan cijfers inzitten(bv AB250).Want als je gebruiker toch letters bij gaat invoeren en je dan enkel een conversie naar int gaat doen,krijg je weer problemen.Dus bij invoer altijd trachten de inhoud te checken. Hier is dat mooi weer gegeven hoe ge uw invoer kunt valideren
Input Validation in C++ - C++ - Source Code | DreamInCode.net

Soulless

Legacy Member
merci wolverine :)

edit: ok dat was precies wat ik zocht nog is merci wolverine ^^

Kmoet wel trg van 0 beginnen :p
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan