Efter att jag tittar en gång till på din kod så har du missuppfattat hur switch-satsar fungerar, vilket kanske också leder till att det verkar som fler än ett kommando körs åt gången.
Du har skrivit din switch-sats så här: (Jag rensade upp lite radbrytningar och indenteringar så det är lättare att läsa.)
switch (inputChar) {
case 'a':
case 'A': {
cout << "Programmet är nu avslutat.\n";
return 0;
}
case 'S':
case 's': {
cout << "Temperaturen är: " << temp;
cout << "\n\n";
}
case 'M':
case 'm': {
cout << "Mata in temperaturen: ";
cin >> temp;
cout << "\n\n";
if (temp < 17) {
temp = 20;
} else if(temp > 25) {
temp = 20;
}
}
}
Du har alltså använt krullparenteserna {} och föreställer dig därför att det ska markera början och slutet på din kod som hanterar varje fall. Men det är inte så switch-satsen funkar!
Krullparanteserna gör i själva verket ingenting i din kod. Det enda de gör är att skapa ett kodblock som du kan t.ex. definiera en lokal variabel i. Vilket du inte gör. Så vi kan ta bort dem och koden gör fortfarande exakt samma sak. Så här:
switch (inputChar) {
case 'a':
case 'A':
cout << "Programmet är nu avslutat.\n";
return 0;
case 'S':
case 's':
cout << "Temperaturen är: " << temp;
cout << "\n\n";
case 'M':
case 'm':
cout << "Mata in temperaturen: ";
cin >> temp;
cout << "\n\n";
if (temp < 17) {
temp = 20;
} else if(temp > 25) {
temp = 20;
}
}
Sättet switch-satsen funkar på är att den helt kodens körning "hoppar" in i den plats som matchar det specifika caset. Och det jävliga är att sedan FORTSÄTTER den, tills att något gör att den slutar.
I caset A så har du en "return"-sats vilket gör att funktionen avslutas där direkt, så där är det ok.
I caset M så kör du inte mer än du tänkt, för att det är sista caset i switchen.
Men för caset S så skriver du ut temperaturen, och sedan så fortsätter programmet in i fallet M. Vilket du kanske tolkar som att den kör fler kommandon än du tänkte dig. Här måste du slänga in en break-sats! Så här alltså:
switch (inputChar) {
case 'a':
case 'A':
cout << "Programmet är nu avslutat.\n";
return 0;
case 'S':
case 's':
cout << "Temperaturen är: " << temp;
cout << "\n\n";
break; // Här är break-satsen som fattades!
case 'M':
case 'm':
cout << "Mata in temperaturen: ";
cin >> temp;
cout << "\n\n";
if (temp < 17) {
temp = 20;
} else if(temp > 25) {
temp = 20;
}
}
Så då har du fått två svar av mig. Ett svar på den fråga du faktiskt ställde, och ett till svar som jag tror faktiskt löser ditt problem.
Här kan du läsa lite mer om switchar och hur de funkar:
https://docs.microsoft.com/en-us/cpp/cpp/switch-statement-cpp...
https://www.w3schools.com/cpp/cpp_switch.asp
Samt lite överkurs om hur man kan missbruka switch-statements. (Oroa dig om du inte fattar. Det här är fulkod som inte är till för nybörjare.)
https://en.wikipedia.org/wiki/Duff%27s_device