18 svar
247 visningar
Fritzzz är nöjd med hjälpen
Fritzzz 207
Postad: 14 okt 2022 13:10 Redigerad: 14 okt 2022 13:11

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; 

                }



            


           


              
                
                


             
                   
             
             
             
             
               
           
            

         

   
   

             


            

            

    


Bubo Online 6998
Postad: 14 okt 2022 13:29

Utan att egentligen läsa koden ser jag direkt att du har break inuti en if-sats.

Fritzzz 207
Postad: 14 okt 2022 14:09
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 ? 

Laguna Online 28597
Postad: 14 okt 2022 14:25

Ja, om du inte sätter sum till 0 så behåller den sitt värde. Var skulle den bli noll automatiskt?

Fritzzz 207
Postad: 14 okt 2022 15:08
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 !!

Laguna Online 28597
Postad: 14 okt 2022 15:48

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?

Fritzzz 207
Postad: 14 okt 2022 15:59
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. 

Laguna Online 28597
Postad: 14 okt 2022 18:13

Hur ser ditt program ut nu?

Fritzzz 207
Postad: 15 okt 2022 14:27 Redigerad: 15 okt 2022 22:01
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

Laguna Online 28597
Postad: 15 okt 2022 21:01

Och vad blir fel?

Fermatrix 7841 – Fd. Medlem
Postad: 15 okt 2022 22:02

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.

manik 82
Postad: 16 okt 2022 12:01

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.

Fritzzz 207
Postad: 17 okt 2022 08:27
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 

Fritzzz 207
Postad: 17 okt 2022 08:28
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 

manik 82
Postad: 23 okt 2022 22:01

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: 6

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;
7
Enter the price (end with < 0;
-1
Sum in foreign currency: 7
Sum in SEK: 7

1. Set exchange rate in SEK (current rate: 1.00
2. Read prices in the foreign currency
3. END


Enter your choice (1-3) :
3

End of program!

Fritzzz 207
Postad: 2 dec 2022 11:50
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: 6

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;
7
Enter the price (end with < 0;
-1
Sum in foreign currency: 7
Sum in SEK: 7

1. Set exchange rate in SEK (current rate: 1.00
2. Read prices in the foreign currency
3. END


Enter your choice (1-3) :
3

End 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 

Laguna Online 28597
Postad: 2 dec 2022 12:22

Du kanske fortfarande inte nollställer sum.

manik 82
Postad: 2 dec 2022 18:12 Redigerad: 2 dec 2022 18:14

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 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;
price = 0;

}

 


break;

 


case 3:
printf("\nEnd of program! \n");
break;


default:
printf(" \nInvalid choice, choose a number from the menue..\n");

 

 

}

 


}

return 0;

}

Fritzzz 207
Postad: 5 dec 2022 22:16
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 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;
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

Svara Avbryt
Close