Regnemaskine

Tags:    c++

<< < 123 > >>
Hej alle sammen.

Nu sidder jeg og læser Bertels fantastiske tutorial og så støder jeg på en opgave. Den går ud på at lave en regnemaskine, men jeg forsøger men jeg kan ikke, opgaven er til kapitel 8, linket er her

Håber i kan hjælpe :)



Tag det lige roligt Jonas, Søren prøver og hjælpe dig.. Du behøves ikke være så aggresiv



Det er 2 gang jeg skriver det... Måske gik jeg lidt overgevind, men synes det er ret irreterene at han skriver

Ja kan godt forstå den giver fejl men hvad med at skrive fejlen, så sparer du os andre en masse gæt og frustration samt gør det mulig for os at komme med en løsning!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Med så mange udråbstegn, nu citere jeg fra en af mine tidliger post:

Okay, Okay der er ikke nogen "fejl", eller jo, det er sådan at når jeg har udfyldt de to første felter (tal 1 og tal 2) så kommer den til hvad jeg vil gøre men istedet så skriver den


Skriver næsten det samme der, han må da idet mindste læse min kode igenem!



Indlæg senest redigeret d. 24.06.2009 17:57 af Bruger #14855
Ja jeg skulle nok have læst det lidt mere igennem, det vil jeg give dig ret i.

Men når folk skriver de får en fejl så antager jeg at det er en compile-time eller runtime fejl og ikke en man selv laver ved brug af cout f.eks, det kan så godt være det er en dum antagelse, det ved jeg ikke.

Men vil så os sige det er jo lovlig at hjælpe til selv. I stedet for bare at sige jeg får denne fejl. Du ved jo fejlen kommer af en "if" statement. Den if statement får jo sin værdi i 'a'. Så ved du 'a' ikke bliver sat ordentlig, hvilket også kommer til tyde ved at den ikke spørger efter noget i din getline. Pointen af jo mere du kan give os at arbejde med jo nemmere bliver det.



Indlæg senest redigeret d. 23.06.2009 22:30 af Bruger #14645
Tak søren :) De sidste virkede :)



Yay! Min lommeregner ser sådan ud nu! :)
Fold kodeboks ind/udKode 




Desværre kan jeg ikke komme med en ordentlig forklaring på hvorfor der skal to efter hinanden ud over at en enkelt ikke giver det ønskede resultat. Kunne faktisk godt selv tænke mig at vide hvorfor?



Hvis vi et øjeblik ser på hvad >> gør, i dette tilfælde hvis den bliver brugt til at læse en int.

Den starter med at skippe "whitespace", dvs mellemrum, tabulator karakterer og linieskift. Så læser den det der måtte komme derefter og som den er i stand til at oversætte til en int, den den læser "returnerer" den.

Den stopper når den finder noget den ikke kan oversætte til en int, om alt går vel, ved et linieskift ('\n'), dette linieskift lader den stå til den næste i rækken.

getline læser en streng, indtil den møder et linieskift, som den også læser.

I din kode har du (og nogle cout's som ikke er vigtige nu):
int t1, t2;
std::cin >> t1;
std::cin >> t2;
std::string a;
std::getline(std::cin, a);
std::getline(std::cin, a);

Hvis så brugeren taster (hvor \n er linieskift/enter/return):
123\n321\np\n

Så vil den første >> læse 123, og stoppe ved den første \n

Den næste >> vil læse den første \n (som den smider ud), derpå læser den 321 og stopper ved nummer 2 \n, som den lader stå.

Den første getline vil som det første læse den anden \n, og derefter stoppe og returnere en tom streng.

Den sidste getline vil så læse p og den sidste \n og dermed returnere strengen "p".

Der er forskellige måder at omgå denne problematik på, den bedste er at undgå at bruge >> til at læse med, men holde sig til getline.




Ahva ? O.o? Volapyk! Ikke for at kritisere :) Vil nok forstå det...



Den korte forklaring: det går galt hvis du mixer >> og getline, så hold dig til getline.



Ok :) Tak



<< < 123 > >>
t