van if statement naar een switch case

algemene C code
Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

van if statement naar een switch case

Berichtdoor christiaan » 31 Jan 2016, 15:30

Hoi allemaal,

Vraagje,

Hoe kan ik onderstaande if statement (zijn er in totaal 5) op een goede manier omzetten naar een switch case.
Overal is de zelfde opbouw, alleen wordt er gekeken naar een ander input qua waarde (passwordLvl 1 t/m 5)

cpp code
void checkPassword() {
if (level == "1") {
if (userinput == passwordLvl1){
Serial.println(" OK.");
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
level = "2";
delay(250);
digitalWrite(24, LOW);
digitalWrite(27, LOW);
} else {
Serial.println(" Wrong passwowrd!");
digitalWrite(22, HIGH);
digitalWrite(25, HIGH);
delay(250);
digitalWrite(22, LOW);
digitalWrite(25, LOW);
}
resetPassword();
}

if (level == "2") {
if (userinput == passwordLvl2){
Serial.println(" OK.");
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
level = "3";
delay(250);
digitalWrite(24, LOW);
digitalWrite(27, LOW);
} else {
Serial.println(" Wrong passwowrd!");
digitalWrite(22, HIGH);
digitalWrite(25, HIGH);
delay(250);
digitalWrite(22, LOW);
digitalWrite(25, LOW);
}
resetPassword();
}

if (level == "3") {
if (userinput == passwordLvl3){
Serial.println(" OK.");
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
level = "4";
delay(250);
digitalWrite(24, LOW);
digitalWrite(27, LOW);
} else {
Serial.println(" Wrong passwowrd!");
digitalWrite(22, HIGH);
digitalWrite(25, HIGH);
delay(250);
digitalWrite(22, LOW);
digitalWrite(25, LOW);
}
resetPassword();
}

if (level == "4") {
if (userinput == passwordLvl4){
Serial.println(" OK.");
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
level = "5";
delay(250);
digitalWrite(24, LOW);
digitalWrite(27, LOW);
} else {
Serial.println(" Wrong passwowrd!");
digitalWrite(22, HIGH);
digitalWrite(25, HIGH);
delay(250);
digitalWrite(22, LOW);
digitalWrite(25, LOW);
}
resetPassword();
}

if (level == "5") {
if (userinput == passwordLvl5){
Serial.println(" OK.");
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
T.PauseTimer();
level = "END!";
gameEnd();
delay(250);
digitalWrite(24, LOW);
digitalWrite(27, LOW);
loopEnd = false;
} else {
Serial.println(" Wrong passwowrd!");
digitalWrite(22, HIGH);
digitalWrite(25, HIGH);
delay(250);
digitalWrite(22, LOW);
digitalWrite(25, LOW);
}
//resetPassword();
}

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: van if statement naar een switch case

Berichtdoor nicoverduin » 31 Jan 2016, 15:43

Als ik je code goed begrijp, begin ik bij level 1 en als ik dit goed heb gedaan dan ga ik door met level=2. Echter daar mijn user input op level1 is gebaseerd wordt hij nu bij level2 afgekeurd. Klopt dat?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 86
Geregistreerd: 31 Dec 2015, 14:11

Re: van if statement naar een switch case

Berichtdoor christiaan » 31 Jan 2016, 16:51

Hij controleerd de ingevoerde code op de keypad, dit is constant een andere 6 cijferige code (maar wel als een String aangegeven in de code, dus deze code wisselt niet per spel).
Zodra je na invoer van de code op # drukt wordt de code gevalideerd. Hij kan maar op 1 van de 5 levels correct zijn.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: van if statement naar een switch case

Berichtdoor nicoverduin » 31 Jan 2016, 17:34

Dus mijn redenering klopt? Omdat als je bij level1 begint en pw is juist dan krijg je level2. En die test zit er direct achteraan.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: van if statement naar een switch case

Berichtdoor shooter » 31 Jan 2016, 19:27

switch level dan moet level wel een integer zijn. maar dat is geen probleem door level=integer (levelstring) te doen.
case 1
....
break
case 2
....

in die cases kan dan
staan if (userinput== passwordlvl[level]){passoke}else{passfalse}
void passoke{ Serial.println(" OK.");
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
level = "5";
delay(250);
digitalWrite(24, LOW);
digitalWrite(27, LOW); }
void passfalse {de else code }
paul deelen
shooter@home.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten