Gå til innhold

The variable 'X' is being used without being initialized


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av MissNew
Lenke til kommentar

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 av GeirGrusom
  • Liker 2
Lenke til kommentar

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 av Flin
  • Liker 1
Lenke til kommentar

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 av MissNew
Lenke til kommentar

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 av GeirGrusom
  • Liker 1
Lenke til kommentar

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 av Flin
  • Liker 1
Lenke til kommentar

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 av MissNew
Lenke til kommentar

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...