Forum: Problem med kontroll av string

Forum huvudsida -> Programmering -> Problem med kontroll av string

Sidor: 1

Till botten

Just1ce 19:54 - 21:a Oktober 2007 | Post #1
Medlem
Inlägg: 15


Skicka PM
  1. #include <iostream>
  2. #include <string>
  3.  
  4. int menu(std::string menyval);
  5.  
  6. int main() {
  7. using std::cout;
  8. using std::cin;
  9. using std::string;
  10.  
  11. string menyval;
  12. cout << "Skapa [nytt] spel eller [ladda]?n";
  13. cin >> menyval;
  14. while(menu(menyval) != 0 || 1) { // Om värdet inte är 0 eller 1, fråga efter nytt
  15. cout << "Ogiltigt värde (returvärde == " << menu(menyval) << "), ange nyttn";
  16. cin >> menyval; }
  17. system("PAUSE");
  18. return 0; }
  19.  
  20. int menu(std::string menyval) { // 0 om nytt spel, 1 om ladda, 3 om felaktig inmatning
  21. if(menyval == "nytt")
  22. return 0;
  23. else if(menyval == "ladda")
  24. return 1;
  25. else
  26. return 2; }

Problem vid while-slingan. Om värdet är 0 eller 1 är det tänkt att den ska skippa while-slingan. Detta gör den inte.
Vad har jag gjort för fel?

-------------------------
Ingen signatur!



ozamosi 20:00 - 21:a Oktober 2007 | Post #2
Administratör
Inlägg: 1129


Skicka PM
while(menu(menyval) != 0 || 1)
Det betyder
kör, förutsatt att (menu(menyval) är skiljt från noll) eller (ett)
ett är per definition sant, alltså kommer vilkoret alltid vara sant.

Det du försöker skriva är
while(menu(menyval) != 0 || menu(menyval) != 1)

-------------------------
Ljusblå



Slash 20:33 - 21:a Oktober 2007 | Post #3
Medlem
Inlägg: 141


Skicka PM
    Citat av ozamosi:
while(menu(menyval) != 0 || 1)
Det betyder
kör, förutsatt att (menu(menyval) är skiljt från noll) eller (ett)
ett är per definition sant, alltså kommer vilkoret alltid vara sant.

Det du försöker skriva är
while(menu(menyval) != 0 || menu(menyval) != 1)


Eller om man inte vill köra menu två gånger (men ändå jättegärna vill ha kvar den i villkoret)Smiley

  1. int val;
  2. while((val=menu(menyval)) != 0 && val != 1)


Eller varför inte

  1. while( (unsigned int)menu(menyval) > 1)


Dessutom är det väl && du menade Justice?

-------------------------
Ingen sigantur!

Senast redigerad 20:37 - 21:a Oktober 2007


Just1ce 20:50 - 21:a Oktober 2007 | Post #4
Medlem
Inlägg: 15


Skicka PM
    Citat av ozamosi:
while(menu(menyval) != 0 || 1)
Det betyder
kör, förutsatt att (menu(menyval) är skiljt från noll) eller (ett)
ett är per definition sant, alltså kommer vilkoret alltid vara sant.

Det du försöker skriva är
while(menu(menyval) != 0 || menu(menyval) != 1)

Ah, lyckades lösa det nu. Två paranteser gjorde susen.Smiley
  1. while(menu(menyval) != (0 || 1))

Tackar för hjälpen.

Förresten, en fråga till. Om man vill läsa/spara en struct från/till fil, hur gör man då?

-------------------------
Ingen signatur!

Senast redigerad 20:52 - 21:a Oktober 2007


ozamosi 21:05 - 21:a Oktober 2007 | Post #5
Administratör
Inlägg: 1129


Skicka PM
Nej, det gjorde inte susen. (0 || 1) = True, vilket representeras med talet 1. Din lösning säger alltså att menu(menyval) inte får vara 1, vilket inte var vad du ville säga.

-------------------------
Ljusblå



Sidor: 1

Forum huvudsida -> Programmering -> Problem med kontroll av string
Atom feed

Du får inte posta i den här tråden | Till toppen