Sida 1 av 1
Felhantering i C++, ska vara int men hur...[LÖST]
Postat: 01 maj 2014, 20:51
av ZerQ
Hej
Har suttit och läst på om felhantering och olika inmatningar. Har kollat lite på cin och getline och hur folk har gjort men finns det någon snygg algoritm eller funktion för att se till att bara en int kan komma igenom en felkontroll?
Är inte så duktig på programmering än så tänkte kolla om ni känner till något bra
// ZerQ
Re: Felhantering i C++, ska vara int men hur kontrollera det
Postat: 01 maj 2014, 21:18
av Osprey
ZerQ skrev:Hej
Har suttit och läst på om felhantering och olika inmatningar. Har kollat lite på cin och getline och hur folk har gjort men finns det någon snygg algoritm eller funktion för att se till att bara en int kan komma igenom en felkontroll?
Är inte så duktig på programmering än så tänkte kolla om ni känner till något bra
// ZerQ
Vad betyder "
bara en int kan komma igenom en felkontroll"..?
Re: Felhantering i C++, ska vara int men hur kontrollera det
Postat: 01 maj 2014, 22:57
av ZerQ
Hehe jo det var lite oklart kan hålla med om det. Jag tänker så att en felhanterare skall kunna stoppa en användare ifrån att skriva in fel svar. Exempel primprogrammet som ajg skrev ihop, den tar som inmatning en Integer men jag kan utan att programmet reagerar skriva 10e.
Programmet körs och alla korrekta prims skrivs ut, problemet är att jag vill inte att programmet ska kunna släppa igenom denna typ av inmatning, där skall en felhantering reagera och begära ett nytt tal.
Om jag vänder på det och skriver e10 körs programmet men hamnar i ett blackhole för programmet körs men utan utskrift och inga felvarningar. även där måste en felhantering ske. Detsamma gäller om jag bara skriver en bokstav som exempel.
Men jag har tittat runt på olika lösningar och hur folk gör men jag skulle vilja veta hur ni gör? finns det en universell lösning eller måste man skriva någon special funktion.
Jag har petat i Python ett tag och där är det lättare att hantera fel som blandingar av char och ints, eller fel typ alls vid inmatning, C++ stödjer ju inte detta

Re: Felhantering i C++, ska vara int men hur kontrollera det
Postat: 01 maj 2014, 23:15
av Osprey
C/C++ har bra stöd för formaterade inmatningar via "scanf" och de varianter som finns på det och sedan har du ju "isdigit" och alla syskon till den att använda för kontroll i efterhand också...
Många gånger så läser man in inmatningar som en sträng vilken man sedan kontrollerar, bara för att kunna ha en bra felhantering...
Re: Felhantering i C++, ska vara int men hur kontrollera det
Postat: 01 maj 2014, 23:22
av ZerQ
Jag har hittat denna lösning på en sida och har provat den i min kod, problemet med att låna kod från andra är att man inte alltid förstår den, jag vill förstå för att kunna göra bättre och rätta eventuella problem eller helt enkelt bara förstå
Kod: Markera allt
while(true)
{
cout << "Ange ett sluttal f\x94r primtalr\x84knaren, avsluta med enter: ";
getline(cin, strInput);
stringstream myStream(strInput);
if(myStream >> siKandidat)
{
break;
}
}
Den tar en getline input som en sträng. Jag hänger med hjälpligt men raden if(myStream >> siKandidat) är jag mycket osäker på vad den gör, jag vet att den tvingar while loopen att brytas om man skriver rätt men exakt hur?
C/C++ har bra stöd för formaterade inmatningar via "scanf" och de varianter som finns på det och sedan har du ju "isdigit" och alla syskon till den att använda för kontroll i efterhand också...
Många gånger så läser man in inmatningar som en sträng vilken man sedan kontrollerar, bara för att kunna ha en bra felhantering...
Aha okej ska kolla in dom och testa lite. Alltid bra med start idéer och hjälp så man kommer på rätt spår

tack igen Osprey
Re: Felhantering i C++, ska vara int men hur kontrollera det
Postat: 01 maj 2014, 23:38
av Osprey
ZerQ skrev:Den tar en getline input som en sträng. Jag hänger med hjälpligt men raden if(myStream >> siKandidat) är jag mycket osäker på vad den gör, jag vet att den tvingar while loopen att brytas om man skriver rätt men exakt hur?
Jag är egentligen inte lika bra på C++ som på C, men jag tolkar det som att "
om tilldelningen från strInput via myStream till siKandidat, som är deklarerad som int, går bra - så hoppa ur while"... Så förmodligen tar den i själva verket byte för byte från strInput och testar med isdigit och om allt är ok så lägger den in värdet i siKandidat och hoppar ur loopen...
[Edit] Och för den delen så betyder "
if(myStream >> siKandidat)" egentligen "
if ((myStream >> siKandidat) != 0)", dvs. om antalet tilldelade bytes är större än noll -så har du förmodligen matat in ett korrekt värde...
Re: Felhantering i C++, ska vara int men hur kontrollera det
Postat: 07 maj 2014, 08:45
av ZerQ
Och för den delen så betyder "if(myStream >> siKandidat)" egentligen "if ((myStream >> siKandidat) != 0)", dvs. om antalet tilldelade bytes är större än noll -så har du förmodligen matat in ett korrekt värde...
Juppz precis vad jag har kommit fram till efter en del testande, måste skriva om denna kodbit, fungerar inte som tänkt för den tar inte bort inmatningar där jag börjar med en siffra som 15m...
Börja om, gör rätt... välkänt fenomen hos mig nu
