fastnar i ett switch case
Hej behöver hjälp med denna uppgift. Det är en shopping assinstant som ska presentera en meny och man får 3 val. Den ska hjälpa en att omvandla priser man köpt för utomlands till svenska kr genom att be användaren att mata in en omvandlingsvaluta. Sedan uppdateras menyn igen med den nuvarande omv valutan och frågar efter val där man kan skriva in priser på varor eller avsluta programmet. Man kan skriva in priser tills man matar in ett negativt värde då avslutas inmatningen och den beräknar summan av priserna i den utländska valutan och i SEK
Har skrivit koden och fick feedback där jag nu insåg att om man väljer case 2 , så "nollställs" inte priserna efter att man angett priserna och fått summorna. Utan om man skriver in en ny omv valuta så beräknas denna omv valuta på de tidigare inmatade priserna. Gissar på att det kan ha något med placerimgen av bracketsen men lyckas inte lösa det undrar om det går att få hjälp med det här.
Tack på förhand !!
#include <stdio.h>
int main(void){
// variablerna
int choice = 0;
float erate = 1.00; //exchangerate
float sum = 0;
float price = 0;
printf(" Your shopping assistant \n");
// upprepning med menyn och valet
while (choice != 3) { //medan val ej är =3 så kör
//skriv ut menyn + while
printf("\n");
printf("1. Set exchange rate in SEK (current rate: %.2f\n", erate);
printf("2. Read prices in the foreign currency \n");
printf("3. END \n");
printf("\n\n");
// lägga in sitt val
printf(" Enter your choice (1-3) : ");
scanf("%d", &choice); //Läser in siffra för ens val
// switch för de olika alternativen
switch (choice) { //de olika alternativen enl choice variabeln
case 1: //sätta valuta kurs
printf("Enter the exchange rate; \n");
scanf("%f", &erate); //omv valuta sätts in i erate
break;
case 2: //sätta in priser beräkna sum och sum2, en loop
while (price >= 0 ) { // medan priset är 0 eller mer
sum+=price; //Summan beräknas
printf("Enter the price (end with < 0; \n");
scanf("%f", &price); //inmatning läggs in i &price
}
if ( price < 0 ){
printf("Sum in foreign currency: %2.f\n ", sum );
printf("Sum in SEK: %2.f \n", sum*erate);
break;
}
case 3:
printf("\nEnd of program! \n");
break;
default:
printf(" \nInvalid choice, choose a number from the menue..\n");
}
}
return 0;
}
Utan att egentligen läsa koden ser jag direkt att du har break inuti en if-sats.
Bubo skrev:Utan att egentligen läsa koden ser jag direkt att du har break inuti en if-sats.
Tack!! måste ha missat det, men stöter fortfarande på samma problem vad kan det vara som gör att priserna inte nollställs ? Behöver jag skriva till kod som nollställer dem ?
Ja, om du inte sätter sum till 0 så behåller den sitt värde. Var skulle den bli noll automatiskt?
Laguna skrev:Ja, om du inte sätter sum till 0 så behåller den sitt värde. Var skulle den bli noll automatiskt?
okej, trodde sum = 0; längst upp skulle se till att den startade på 0 varje gång men det var fel. Testade lägga in sum = 0; efter if satsen i case 2. Jag antar att det är det rimligaste då summan ska nollställas efter att man printat ut den slutgiltiga summan och summan i SEK, men jag får då att summan blir noll efter fortsatt körning av programmet och inmatning av priser. Vraför funkar inte detta och var ska man annars sätta den ?
if ( price < 0 ){
printf("Sum in foreign currency: %2.f\n ", sum );
printf("Sum in SEK: %2.f \n", sum*erate);
sum = 0;
tack på förhand !!
Jag förstår inte riktigt när du vill nollställa sum. Några rimliga ställen är i början av loopen, i början av case 2 och efter case 2. Vad blir fel?
Laguna skrev:Jag förstår inte riktigt när du vill nollställa sum. Några rimliga ställen är i början av loopen, i början av case 2 och efter case 2. Vad blir fel?
jag vill nollställa summan efter att summan i den utländska valutan och summan i SEK skrivits ut, för då har programmet gjort sitt jobb.
Sen efter att summorna skrivits ut så skrivs menyn med de tre valen ut igen och om man väljer val 1, så kan man sätta en ny exchangerate sen så skrivs den uppdaterade menyn ut med det "current exchangerate: " ut och man kan välja mellan menyn, väljer jag nr 2, där jag får lägga in olika värden tills jag skriver in ett negativt värde
så beräknas summorna för de båda valutorna ut men problemet är att summan nollställs inte och även om jag lagt in en ny exchangerate och ska läsa in nya priser hoppar den direkt till if-satsen där den skriver ut den båda summorna med den nya exchangeraten fast med den gamla summan.
Hur ser ditt program ut nu?
Laguna skrev:Hur ser ditt program ut nu?
såhär ser det ut nu med en sum = 0; efter if satsen med summorna utprintade
#include <stdio.h>
int main(void){
// variablerna
int choice = 0;
float erate = 1.00; //exchangerate
float sum = 0;
float price = 0;
printf(" Your shopping assistant \n");
// upprepning med menyn och valet
while (choice != 3) { //medan val ej är =3 så kör
//skriv ut menyn + while
printf("\n");
printf("1. Set exchange rate in SEK (current rate: %.2f\n", erate);
printf("2. Read prices in the foreign currency \n");
printf("3. END \n");
printf("\n\n");
// lägga in sitt val
printf(" Enter your choice (1-3) :\n ");
scanf("%d", &choice); //Läser in siffra för ens val
// switch för de olika alternativen
switch (choice) { //de olika alternativen enl choice variabeln
case 1: //sätta valuta kurs
printf("Enter the exchange rate: \n");
scanf("%f", &erate); //omv valuta sätts in i erate
break;
case 2: //sätta in priser beräkna sum och sum2, en loop
while (price >= 0 ) { // medan priset är 0 eller mer
sum+=price; //Summan beräknas
printf("Enter the price (end with < 0; \n");
scanf("%f", &price); //inmatning läggs in i &price
}
if ( price < 0 ){
printf("Sum in foreign currency: %2.f\n ", sum );
printf("Sum in SEK: %2.f \n", sum*erate);
sum = 0;
}
break;
case 3:
printf("\nEnd of program! \n");
break;
default:
printf(" \nInvalid choice, choose a number from the menue..\n");
}
}
return 0;
}
Onödiga mellanslag borttagna. /Dracaena
Och vad blir fel?
Problemet är att case 2 är en oädnlig whille loop om man matar in ett positivt värde, om man matar in ett negativt värde så avslutar man.
Uttryck i ord vad du vill att case 2 ska göra så blir det enklare att hjälpa dig.
Din senaste version ser ut att fungera bra första gången du väljer case 2. När du matar in ett negativt värde för price så avslutas inläsnings-loopen och summan skrivs ut. Men tänk på att price behåller sitt senaste (negativa) värde till nästa gång du väljer case 2.
Om du vill kunna välja case 2 en gång till och mata in nya tal så måste du nollställa price
, till exempel samtidigt som du nollställer sum.
Dracaena skrev:Problemet är att case 2 är en oädnlig whille loop om man matar in ett positivt värde, om man matar in ett negativt värde så avslutar man.
Uttryck i ord vad du vill att case 2 ska göra så blir det enklare att hjälpa dig.
Hej tack för svar. Case 2 ska vara en oändlig while loop som ska fråga om ett pris som man matar in tills man matar in ett negativt värde. Då ska den berökna summan i SEK och summan i den utländska valutan
Sen ska den printa ut menyn igen dör man får välja ett av de tre alternativen och så ska det hålla på tills man skriver in 3 som alternativ då avslutas programmet
manik skrev:Din senaste version ser ut att fungera bra första gången du väljer case 2. När du matar in ett negativt värde för price så avslutas inläsnings-loopen och summan skrivs ut. Men tänk på att price behåller sitt senaste (negativa) värde till nästa gång du väljer case 2.
Om du vill kunna välja case 2 en gång till och mata in nya tal så måste du nollställa
price
, till exempel samtidigt som du nollställer sum.
Okej tack så mycket för svaret, men det jag har svårt att förstå är var man ska nollställe price eller sum? Jag trodde de mest logiska var efter att den printat ut summorna efter if satsen men det blir inte rätt vilket jag inte förstår varför
Okej tack så mycket för svaret, men det jag har svårt att förstå är var man ska nollställe price eller sum? Jag trodde de mest logiska var efter att den printat ut summorna efter if satsen men det blir inte rätt vilket jag inte förstår varför
Om jag tar den version du postat senast och lägger till den här raden så får det beteende jag tror du vill ha. Men det låter som du provat detta och inte är nöjd. Ge oss ett exempel där programmet "gör fel" så blir det lättare att förstå vad du vill ha.
if ( price < 0 ){
printf("Sum in foreign currency: %2.f\n ", sum );
printf("Sum in SEK: %2.f \n", sum*erate);
sum = 0;
price = 0; // tillägg
}
Exempel på utskrift som jag tycker ser bra ut.
Your shopping assistant
1. Set exchange rate in SEK (current rate: 1.00
2. Read prices in the foreign currency
3. END
Enter your choice (1-3) :
2
Enter the price (end with < 0;
1
Enter the price (end with < 0;
2
Enter the price (end with < 0;
3
Enter the price (end with < 0;
-1
Sum in foreign currency: 6
Sum in SEK: 61. Set exchange rate in SEK (current rate: 1.00
2. Read prices in the foreign currency
3. END
Enter your choice (1-3) :
2
Enter the price (end with < 0;
7
Enter the price (end with < 0;
-1
Sum in foreign currency: 7
Sum in SEK: 71. Set exchange rate in SEK (current rate: 1.00
2. Read prices in the foreign currency
3. END
Enter your choice (1-3) :
3End of program!
manik skrev:Okej tack så mycket för svaret, men det jag har svårt att förstå är var man ska nollställe price eller sum? Jag trodde de mest logiska var efter att den printat ut summorna efter if satsen men det blir inte rätt vilket jag inte förstår varför
Om jag tar den version du postat senast och lägger till den här raden så får det beteende jag tror du vill ha. Men det låter som du provat detta och inte är nöjd. Ge oss ett exempel där programmet "gör fel" så blir det lättare att förstå vad du vill ha.
if ( price < 0 ){ printf("Sum in foreign currency: %2.f\n ", sum ); printf("Sum in SEK: %2.f \n", sum*erate); sum = 0; price = 0; // tillägg }
Exempel på utskrift som jag tycker ser bra ut.
Your shopping assistant
1. Set exchange rate in SEK (current rate: 1.00
2. Read prices in the foreign currency
3. END
Enter your choice (1-3) :
2
Enter the price (end with < 0;
1
Enter the price (end with < 0;
2
Enter the price (end with < 0;
3
Enter the price (end with < 0;
-1
Sum in foreign currency: 6
Sum in SEK: 61. Set exchange rate in SEK (current rate: 1.00
2. Read prices in the foreign currency
3. END
Enter your choice (1-3) :
2
Enter the price (end with < 0;
7
Enter the price (end with < 0;
-1
Sum in foreign currency: 7
Sum in SEK: 71. Set exchange rate in SEK (current rate: 1.00
2. Read prices in the foreign currency
3. END
Enter your choice (1-3) :
3End of program!
hej sorry för sent svar, men felet blir att om du väljer val 1, lägger in din exchnage rate och sedan 2, där du stoppar in summorna på priserna tills man matar in ett negativt värde så får man exakt som pogrammet ska göra ut summan i sek och i utländska valutan men problemet här är att när sedan summan skrivits ut och man väljer nummer 1 igen för att slå in en ny exhange rate och sedan väljer 2 för att lägga in summor så blir det fel, den skriver inte ut rätt summa eller så skriver den ut 0.
Testa köra programmet två-tre gånger där du väljer val 1 sätter in en exchange rate sedan summorna tills du stoppar in ett negativt värde sedan testa köra igen där är felet
Du kanske fortfarande inte nollställer sum.
När jag kör min version av programmet med tillägget enligt ovan så får jag ett resultat som ser korrekt ut. Postar hela mitt program så kan du själv jämföra. Verktyget "diff" är ett bra sätt att jämföra två versioner av samma program.
Edit:
Ett annat klassiskt misstag är att man ändrar programmet men glömmer kompilera om det. Vi har alla gjort det misstaget.
Lycka till med felsökningen!
Visa spoiler
#include <stdio.h>
int main(void){
// variablerna
int choice = 0;
float erate = 1.00; //exchangerate
float sum = 0;
float price = 0;
printf(" Your shopping assistant \n");
// upprepning med menyn och valet
while (choice != 3) { //medan val ej är =3 så kör
//skriv ut menyn + while
printf("\n");printf("1. Set exchange rate in SEK (current rate: %.2f\n", erate);
printf("2. Read prices in the foreign currency \n");
printf("3. END \n");
printf("\n\n");// lägga in sitt val
printf(" Enter your choice (1-3) :\n ");
scanf("%d", &choice); //Läser in siffra för ens val
// switch för de olika alternativen
switch (choice) { //de olika alternativen enl choice variabelncase 1: //sätta valuta kurs
printf("Enter the exchange rate: \n");
scanf("%f", &erate); //omv valuta sätts in i erate
break;
case 2: //sätta in priser beräkna sum och sum2, en loop
while (price >= 0 ) { // medan priset är 0 eller mer
sum+=price; //Summan beräknas
printf("Enter the price (end with < 0; \n");
scanf("%f", &price); //inmatning läggs in i &price
}
if ( price < 0 ){
printf("Sum in foreign currency: %2.f\n ", sum );
printf("Sum in SEK: %2.f \n", sum*erate);
sum = 0;
price = 0;}
break;
case 3:
printf("\nEnd of program! \n");
break;
default:
printf(" \nInvalid choice, choose a number from the menue..\n");
}
}
return 0;}
manik skrev:När jag kör min version av programmet med tillägget enligt ovan så får jag ett resultat som ser korrekt ut. Postar hela mitt program så kan du själv jämföra. Verktyget "diff" är ett bra sätt att jämföra två versioner av samma program.
Edit:
Ett annat klassiskt misstag är att man ändrar programmet men glömmer kompilera om det. Vi har alla gjort det misstaget.
Lycka till med felsökningen!
Visa spoiler
#include <stdio.h>
int main(void){
// variablerna
int choice = 0;
float erate = 1.00; //exchangerate
float sum = 0;
float price = 0;
printf(" Your shopping assistant \n");
// upprepning med menyn och valet
while (choice != 3) { //medan val ej är =3 så kör
//skriv ut menyn + while
printf("\n");printf("1. Set exchange rate in SEK (current rate: %.2f\n", erate);
printf("2. Read prices in the foreign currency \n");
printf("3. END \n");
printf("\n\n");// lägga in sitt val
printf(" Enter your choice (1-3) :\n ");
scanf("%d", &choice); //Läser in siffra för ens val
// switch för de olika alternativen
switch (choice) { //de olika alternativen enl choice variabelncase 1: //sätta valuta kurs
printf("Enter the exchange rate: \n");
scanf("%f", &erate); //omv valuta sätts in i erate
break;
case 2: //sätta in priser beräkna sum och sum2, en loop
while (price >= 0 ) { // medan priset är 0 eller mer
sum+=price; //Summan beräknas
printf("Enter the price (end with < 0; \n");
scanf("%f", &price); //inmatning läggs in i &price
}
if ( price < 0 ){
printf("Sum in foreign currency: %2.f\n ", sum );
printf("Sum in SEK: %2.f \n", sum*erate);
sum = 0;
price = 0;}
break;
case 3:
printf("\nEnd of program! \n");
break;
default:
printf(" \nInvalid choice, choose a number from the menue..\n");
}
}
return 0;}
Tusen tack för all hjälp, jag löste det tillslut hade glömt att nollställa variablerna innan while loopen