2 svar
175 visningar
mjatte.mj 70 – Fd. Medlem
Postad: 10 jan 2019 08:38

Dublicate case value ’1’

#include <iostream>

#include <iomanip>

using namespace std;

 

int main(int argc, const char * argv[])

{

 

   double tid, pers;

   string namn, namn2, rang, rang2, datum;

   int svar;

   

   

   {

   cout << "Ange ditt fullständiga namn: " << endl;

   cin >> namn;

   cin >> namn2;

   cout << "Vilken restaurang vill du ringa? " << endl;

   cin >> rang;

   cin >> rang2;

   cout << "vilket dag vill du boka? " << endl;

   cin >> datum;

}

  

   

   

   cout << "\n---DIALOG---" << "\n\n--Hej! Mitt namn är " << namn << " " << namn2 << "." << endl;

   cout << "\t\tHejsan " << namn << ", du har kommit till " << rang <<  ". Vad kan vi hjälpa dig med? --" << endl;

   cout << "--Jag skulle vilja boka ett bord på " << datum << ", finns det något bord ledigt?" << endl;

   cout << "\t\t Jag ska kolla.....hmm...vilken tid vill du boka?--" << endl;

   cin >> tid;

  

   if(tid >= 15 && tid < 24)

   {

       cout << "\t\t Det ska nog gå att fixa. Hur många personer är ni?--" << endl;

       cin >> pers;

       

       

       if(pers <= 8)

       {

           cout << "\t\tNi är välkomna vid " << tid << " på " << datum << ".--" << endl;

       }

       

       else

       {

           cout << "\t\tVi har tyvärr bara plats för 8 personer då.--" << endl;

           cout << "--Jaha okej, vad synd....Hejdå" << endl;

       }

   }

   

else if(tid >= 11 && tid <= 14)

{

   cout << "\t\tVi serverar endast dagens lunch då." << endl;

   cout << "\t\tVill ni ha lunch istället?--" << endl;

   cin >> svar;

   

  

   

   

   

   

   switch(svar)

   {

       case("nej" || "nej tack"):

           cout << "\t\tOkej jag ber om ursäkt för att vi inte kunde uppfylla ditt önskemål...--" << endl;

           cout << "--Det är okej, hejdå!" << endl;

       exit(0);

   

       case("ja" || "ja tack"):    HÄR KOMMER DET UPP ”dublicate case value ’1’

        

           cout << "\t\tVad roligt, ni är välkomna vid " << tid << ".--" << endl;

        }

}

 

   

   

   

   

   

   return 0;

haraldfreij 1322
Postad: 10 jan 2019 09:12 Redigerad: 10 jan 2019 09:20

Variabeln svar är en int, du kan inte jämföra den med strängarna "ja", "nej", etc (De är, om man ska vara petig, av typen const char*). Felmeddelandet är lite kryptiskt, och beror på att du får samma konstantvärde från ("nej" || "nej tack") och ("ja" || "ja tack"). Du kan inte ta || på strängarna såhär, när det du menar är "om svar är antingen ja eller ja tack". Generellt kan du lösa den typen av case-satser genom att lägga flera case efter varandra, eftersom man alltid fortsätter på nästa case om det inte finns ett break emellan.

Nästa gång du postar en programmeringsfråga, så skriv gärna koden utan en massa onödiga radbrytningar, och med en kommentar om vad du vill ha hjälp med. Typ "Jag försöker kompilera följande program, som ska simulera en restaurangbokningssamtal, men får ett fel på rad 44 ("duplicate case value ’1’"). Kan ni se vad som har blivit fel?"

Laguna Online 30704
Postad: 10 jan 2019 09:30

Jag fyller på med en kommentar om "nej" || "nej tack" osv.: det som händer här är att 'switch' alltid vill ha en 'int' (eller kanske 'char'), och då gör den brutalt om alla case-uttryck till 'int'.

|| är en operator som ger ett booleskt värde, och strängar tolkas som true i booleskt kontext och booleskt kan göras om till int, så kompilatorn är nöjd med detta men konstaterar att du får true (omgjort till 1 som int) i båda fallen, och då fungerar inte 'switch', för den ska kunna välja högst ett fall.

Men 'svar' kommer aldrig att innehålla en sådan sträng i alla fall i ditt program för det är en int. Du får deklarera den som string om den ska kunna innehålla text.

Du får använda ett antal if-satser i stället för switch.

Svara
Close