MissNew Skrevet 18. september 2012 Del Skrevet 18. september 2012 Hva gjør jeg for feil? Noen som kan forklare for en nybegynner som ikke skjønner helt ennå? #include <stdio.h> #include <stdlib.h> #pragma argsused int main(int argc, char **argv) { float pris; float moms; float totalt; while (totalt>1) { printf("Skriv inn prisen på varen:"); scanf("f%",&moms); totalt=pris+moms; printf("\nSummen er nå f%" ,totalt); printf("\nVil du fortsette ? Tast 1 for ja eller 2 for nei."); scanf("%d",&totalt); totalt=pris*(23/100+1); } printf("Prisen er nå %.2f ", totalt); getchar(); system ("PAUSE"); return 0; } ------- Plus at jeg ikke skjønner hva "getchar();" brukes til? Hva betyr det? Jeg skal få et program som regner ut hva total prisen blir av en vare når momsen er på 23%. Løkka skall slutte når totalen blir negativ. Prøv gjerne forklare slik at jeg kanskje skjønner isteden for å gi direkte fasit svar Tusen takk, Fru Ny Lenke til kommentar
GeirGrusom Skrevet 18. september 2012 Del Skrevet 18. september 2012 float totalt; while (totalt>1) Her er feilen. Grunnen til at C reagerer på dette, er at en variabel som ikke enda har fått noen verdi, i utgangspunktet inneholder en udefinert verdi. Å teste på denne kan gi helt vilkårlig oppførsel, avhengig av implementasjonen. En skulle tro det var null, men det er ikke tilfellet. Både pris og totalt er uinitialiserte variabler. getchar() henter et tegn fra tastaturet. Hensikten er at programmet skal vente med å lukke seg helt til brukeren trykker på en tast. Lenke til kommentar
MissNew Skrevet 18. september 2012 Forfatter Del Skrevet 18. september 2012 (endret) float totalt; while (totalt&--#62;1) Her er feilen. Grunnen til at C reagerer på dette, er at en variabel som ikke enda har fått noen verdi, i utgangspunktet inneholder en udefinert verdi. Å teste på denne kan gi helt vilkårlig oppførsel, avhengig av implementasjonen. En skulle tro det var null, men det er ikke tilfellet. Både pris og totalt er uinitialiserte variabler. getchar() henter et tegn fra tastaturet. Hensikten er at programmet skal vente med å lukke seg helt til brukeren trykker på en tast. Takk for svar Det siste skjønte jeg veldig bra nå. Supert forklart! Men skjønner fortsatt ikke float totalt; while (totalt&--#62;1) Totalt er jo udefinert på en måte men jeg har jo (prøvd) å sette den slik at den skall være alt som er mer enn null? Eller hvordan gjør jeg det? Fordi "totalt" skall jo være lik prisen+moms men kan inne være mindre enn null... Kan jeg skrive slik da?: float pris; float moms; float totalt; while ( totalt = = pris * ( 23 / 100 + 1 ) = > 1 ) Eller slik?; float pris=0 float moms; float totalt=1 while (totalt &--#62; 1 Endret 18. september 2012 av MissNew Lenke til kommentar
MissNew Skrevet 18. september 2012 Forfatter Del Skrevet 18. september 2012 Uff, det ble jo bare feil i kode når jeg skrev det inn. Så rart Prøvde å skrive while ( totalt > 1 ) men det ble jo bare til "while (totalt &--#62; 1" sykt rart? haha Lenke til kommentar
GeirGrusom Skrevet 18. september 2012 Del Skrevet 18. september 2012 (endret) Problemet er at når du gjør en while(totalt > 1) så leser du fra totalt. Totalt har enda ingen verdi, så når du prøver å lese fra den, så kan verdien alt fra -2147483648 til 2147483647. Derfor sier kompilatoren ifra, fordi verdien ikke er definert enda. edit: den feilen er veldig irriterende ja Endret 18. september 2012 av GeirGrusom 2 Lenke til kommentar
Flin Skrevet 18. september 2012 Del Skrevet 18. september 2012 (endret) Det er som geir sier. Et viktig spørsmål er "Hva gjør egentlig en while-løkke?". Den sjekker om det som står i parentesen er sant og hvis det er sant så utfører den det som står i løkka. Ok så vi må altså sjekke det som står i løkka, sjekke om det er sant eller ikke. Ta utsagnet "Jeg er eldre enn 25 år", et utsagn det er umulig å sjekke uten å vite min alder. Hvis jeg derimot sier "Jeg er 22 år og jeg er eldre enn 25 år". Nå vet vi at jeg lyver fordi logikken ikke holder her. Det er samme problem du har, første gangen du kjører løkka vet ikke programmet verdien av total og kan derfor ikke teste den. Det som skjer er at dataen gir den en "tilfeldig" verdi og tester, som du har sett skaper det problemer. Så hva må du gjøre med variabelen du vil teste? Hva er prisen før man har kjøpt noen varer? Hvis jeg og geir har forklart på en godt måte og du kan svare på de to spørsmålene burde du også kunne svare på hvor i programmet du må spesifisere total og hva som kan være en god verdi. Gitt at jeg skjønner oppgaven rett, regner med at du vil lese inn prisen på en vare før moms , regne ut momsen og den nye prisen. Samme greie gjeller også for pris. EDIT: Tykk feil. Endret 18. september 2012 av Flin 1 Lenke til kommentar
MissNew Skrevet 18. september 2012 Forfatter Del Skrevet 18. september 2012 (endret) Tusen takk før meget godt svar fra dere begge, jeg borde jo skjønne men får det fortsatt ikke slik jeg vil ha det. Vet ikke helt hvordan jeg definerer en variabel? Den skall jo vare udefinert frem til noen taster inn det priset varen koster... Prisen på en vare før man kjøper den er jo null... Kan dere skrive ut fasit ? Er jeg veldig langt fra å få det til å gjøre som jeg vil? # include < stdio.h > # include < stdlib.h > # pragma argsused int main(int argc, char * * argv ) { float pris= 0; float moms; float totalt; while ( pris < = 1 ) { printf("Skriv inn prisen på varen:"); scanf("%f",&pris); totalt= pris * ( 23 / 100 + 1 ) ; printf("Prisen er nå % . 2 f ", & totalt); } getchar(); system ("PAUSE"); return 0; } Endret 18. september 2012 av MissNew Lenke til kommentar
GeirGrusom Skrevet 18. september 2012 Del Skrevet 18. september 2012 (endret) Tusen takk før meget godt svar fra dere begge, jeg borde jo skjønne men får det fortsatt ikke slik jeg vil ha det. Vet ikke helt hvordan jeg definerer en variabel? Den skall jo vare udefinert frem til noen taster inn det priset varen koster... Prisen på en vare før man kjøper den er jo null... Kan dere skrive ut fasit ? Er jeg veldig langt fra å få det til å gjøre som jeg vil? # include &--#60; stdio.h &--#62; # include &--#60; stdlib.h &--#62; # pragma argsused int main(int argc, char * * argv ) { float pris= 0; float moms; float totalt; while ( pris &--#60; = 1 ) { printf("Skriv inn prisen på varen:"); scanf("%f",&pris); totalt= pris * ( 23 / 100 + 1 ) ; printf("Prisen er nå % . 2 f ", & totalt); } getchar(); system ("PAUSE"); return 0; } Du kan jo flytte whilen til at løkken må bli utført minst én gang: # include < stdio.h > # include < stdlib.h > # pragma argsused int main(int argc, char * * argv ) { float pris; float moms; float totalt; do { printf("Skriv inn prisen på varen:"); scanf("%f",&pris); totalt= pris * ( (23 / 100.0f) + 1 ) ; // 23 / 100 blir et heltall: nemlig null. Bruk float for å unngå dette. printf("Prisen er nå %.2f ", totalt); // Trenger ikke referanse til totalt }while(pris > 0); getchar(); system ("PAUSE"); return 0; } Endret 18. september 2012 av GeirGrusom 1 Lenke til kommentar
Flin Skrevet 18. september 2012 Del Skrevet 18. september 2012 (endret) Siden du leser inn tall til pris og regner ut totalt trenger du bare å sette verdiene til et tall som oppfyller sjekken i while-løkka. Siden null er mindre enn en bruker ville dette funke. # include <stdio.h>; # include <stdlib.h>; # pragma argsused float pris; float totalt; pris = 0.0; totalt = 0.0; while ( pris <= 1 ) { printf("Skriv inn prisen på varen:"); scanf("%f",&pris); totalt= pris * ( 23.0 / 100.0 + 1.0 ) ; printf("Prisen er nå % . 2 f ", & totalt); } getchar(); system ("PAUSE"); return 0; Geir har gitt et godt svar som burde fungere veldig bra i dette tilfellet og andre tilfeller. Personlig liker jeg å gjøre det på min måte, men det er litt smak og behag. Kommer kanskje ann på hvorfor man programmerer også. Endret 18. september 2012 av Flin 1 Lenke til kommentar
MissNew Skrevet 18. september 2012 Forfatter Del Skrevet 18. september 2012 (endret) Ja, så det også. Men det er bare det du gjort annerledes. Dessverre så regner programmet ikke at momsen er 23% og DET skjønner jeg ikke noe av. Ny utfordring (!)... Hehe Oj, så nå at du ikke brukt Do og While løkke. Bare while løkka hvilket var det som jeg prøvde på i begynnelsen.. Bra Då fikk jeg sett det også Takk Geir og Flin! Endret 18. september 2012 av MissNew Lenke til kommentar
MissNew Skrevet 18. september 2012 Forfatter Del Skrevet 18. september 2012 Flin, Jeg får ikke din måte å programmera på å virke her... Lenke til kommentar
Flin Skrevet 18. september 2012 Del Skrevet 18. september 2012 Nå må jeg innrømme at jeg aldri har programmert i helt vanlig C så noe av syntaxen er litt ukjent for meg, det er veldig mulig at det er en liten feil et eller annet sted. Hvis jeg kjenner meg selv rett så får jeg vel en trang til å sjekke det ut i morgen så kanskje det kommer et program som funker. Lenke til kommentar
GeirGrusom Skrevet 19. september 2012 Del Skrevet 19. september 2012 I printf så er formatstringen feil. Ta vekk mellomrom i input elementet, og & fra verdien så burde det funke. Lenke til kommentar
zotbar1234 Skrevet 19. september 2012 Del Skrevet 19. september 2012 Vet ikke helt hvordan jeg definerer en variabel? Eksempelvis denne har fasiten. Den skall jo vare udefinert frem til noen taster inn det priset varen koster... Eh, nei. Variabelens verdi kan være udefinert fram til verdien tilordnes på en eller annen måte. Variabelen selv vil være definert fra definisjonspunktet og ut blokken (for ikke-globale variable) Kan dere skrive ut fasit ? Får vi karakteren da også? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå