Switch-sats
switch-satsen är också en av kontrollstrukturerna som förenklar beslutsfattande i dina program. Den erbjuder ett effektivt sätt att utvärdera ett uttryck och utföra olika kodblock baserat på värdet av det uttrycket. Detta är särskilt användbart när du hanterar ett stort antal förgreningar.
Den är främst utformad för att arbeta med numeriska värden, såsom heltal (int) och tecken (char).
switch.h
12345678910111213141516switch (expression) { case value1: // Code to execute when expression matches value1 break; case value2: // Code to execute when expression matches value2 break; // More cases can be added as needed // Code to execute when expression matches valueN default: // Code to execute when none of the case labels match the expression }
-
Uttrycket utvärderas en gång, och programmet hoppar till rätt
casebaserat på värdet av uttrycket; -
Varje
caserepresenterar ett specifikt värde eller en uppsättning värden som uttrycket kan motsvara; -
break-satsen används för att lämna switch-blocket efter att koden för ett visst case har körts; -
defaultär valfritt och används när inget av de angivna case matchar uttrycket. Det fungerar som ett fångstalternativ.
Anta att du äger en restaurang och vill tillhandahålla en meny baserat på numeriska koder. Här är kodrepresentationen av menyalternativen.
main.cpp
1234567891011121314151617181920212223242526#include <iostream> int main() { // try to change the value int menu_number = 1; switch (menu_number) { case 1: std::cout << "Pizza" << std::endl; break; case 2: std::cout << "Burger with fries" << std::endl; break; case 3: std::cout << "Pasta with meatballs" << std::endl; break; default: std::cout << "We don`t have this in our menu" << std::endl; break; } }
Ja, detta kan uppnås med ett enkelt if-uttryck, och det skulle se ut ungefär så här:
main.cpp
123456789101112131415161718192021222324#include <iostream> int main() { // try to change the value int menu_number = 1; if (menu_number == 1) { std::cout << "Pizza" << std::endl; } else if (menu_number == 2) { std::cout << "Burger with fries" << std::endl; } else if (menu_number == 3) { std::cout << "Pasta with meatballs" << std::endl; } else { std::cout << "We don`t have this in our menu" << std::endl; } }
Det fungerar på samma sätt och som förväntat, men det är generellt bättre att använda ett switch-uttryck eftersom det erbjuder ett tydligare, mer lättläst och, viktigast av allt, lättare att underhålla och skalbart sätt att hantera denna typ av styrflöde.
Att utelämna nyckelordet break i ett switch-uttryck kan leda till oväntat programbeteende, eftersom koden fortsätter att exekvera i efterföljande case. Dock kan man medvetet utelämna break för att hantera flera case inom samma kodblock. Denna metod, känd som fall-through, gör det möjligt att hantera relaterade case tillsammans.
main.cpp
12345678910111213141516171819202122#include <iostream> int main() { // change the number and look how it affect the output int number = 3; switch (number) { case 1: std::cout << '1' << std::endl; case 2: std::cout << '2' << std::endl; case 3: std::cout << '3' << std::endl; case 4: std::cout << '4' << std::endl; case 5: std::cout << '5' << std::endl; break; } }
Swipe to start coding
Du bygger ett veckoplaneringssystem som returnerar namnet på dagen baserat på dess nummer (1 för måndag, 2 för tisdag, osv.).
- Inuti funktionen
getDayName, använd ettswitch-uttryck pådayNumber:- För varje fall från
1till7, tilldela motsvarande dagsnamn ("Monday","Tuesday", ...,"Sunday") till variabelndayName. - Använd
break-satsen efter varje fall för att undvika fall-through. - Använd ett
default-fall för att tilldela"Invalid day"om inmatningen inte är mellan 1 och 7.
- För varje fall från
- Returnera värdet av
dayNamefrån funktionen.
Lösning
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 7.69
Switch-sats
Svep för att visa menyn
switch-satsen är också en av kontrollstrukturerna som förenklar beslutsfattande i dina program. Den erbjuder ett effektivt sätt att utvärdera ett uttryck och utföra olika kodblock baserat på värdet av det uttrycket. Detta är särskilt användbart när du hanterar ett stort antal förgreningar.
Den är främst utformad för att arbeta med numeriska värden, såsom heltal (int) och tecken (char).
switch.h
12345678910111213141516switch (expression) { case value1: // Code to execute when expression matches value1 break; case value2: // Code to execute when expression matches value2 break; // More cases can be added as needed // Code to execute when expression matches valueN default: // Code to execute when none of the case labels match the expression }
-
Uttrycket utvärderas en gång, och programmet hoppar till rätt
casebaserat på värdet av uttrycket; -
Varje
caserepresenterar ett specifikt värde eller en uppsättning värden som uttrycket kan motsvara; -
break-satsen används för att lämna switch-blocket efter att koden för ett visst case har körts; -
defaultär valfritt och används när inget av de angivna case matchar uttrycket. Det fungerar som ett fångstalternativ.
Anta att du äger en restaurang och vill tillhandahålla en meny baserat på numeriska koder. Här är kodrepresentationen av menyalternativen.
main.cpp
1234567891011121314151617181920212223242526#include <iostream> int main() { // try to change the value int menu_number = 1; switch (menu_number) { case 1: std::cout << "Pizza" << std::endl; break; case 2: std::cout << "Burger with fries" << std::endl; break; case 3: std::cout << "Pasta with meatballs" << std::endl; break; default: std::cout << "We don`t have this in our menu" << std::endl; break; } }
Ja, detta kan uppnås med ett enkelt if-uttryck, och det skulle se ut ungefär så här:
main.cpp
123456789101112131415161718192021222324#include <iostream> int main() { // try to change the value int menu_number = 1; if (menu_number == 1) { std::cout << "Pizza" << std::endl; } else if (menu_number == 2) { std::cout << "Burger with fries" << std::endl; } else if (menu_number == 3) { std::cout << "Pasta with meatballs" << std::endl; } else { std::cout << "We don`t have this in our menu" << std::endl; } }
Det fungerar på samma sätt och som förväntat, men det är generellt bättre att använda ett switch-uttryck eftersom det erbjuder ett tydligare, mer lättläst och, viktigast av allt, lättare att underhålla och skalbart sätt att hantera denna typ av styrflöde.
Att utelämna nyckelordet break i ett switch-uttryck kan leda till oväntat programbeteende, eftersom koden fortsätter att exekvera i efterföljande case. Dock kan man medvetet utelämna break för att hantera flera case inom samma kodblock. Denna metod, känd som fall-through, gör det möjligt att hantera relaterade case tillsammans.
main.cpp
12345678910111213141516171819202122#include <iostream> int main() { // change the number and look how it affect the output int number = 3; switch (number) { case 1: std::cout << '1' << std::endl; case 2: std::cout << '2' << std::endl; case 3: std::cout << '3' << std::endl; case 4: std::cout << '4' << std::endl; case 5: std::cout << '5' << std::endl; break; } }
Swipe to start coding
Du bygger ett veckoplaneringssystem som returnerar namnet på dagen baserat på dess nummer (1 för måndag, 2 för tisdag, osv.).
- Inuti funktionen
getDayName, använd ettswitch-uttryck pådayNumber:- För varje fall från
1till7, tilldela motsvarande dagsnamn ("Monday","Tuesday", ...,"Sunday") till variabelndayName. - Använd
break-satsen efter varje fall för att undvika fall-through. - Använd ett
default-fall för att tilldela"Invalid day"om inmatningen inte är mellan 1 och 7.
- För varje fall från
- Returnera värdet av
dayNamefrån funktionen.
Lösning
Tack för dina kommentarer!
single