Hej igen. Detta: Oj, jag har en del kvar att lära...Hjälp
Denna gången har jag ett fungerande program.
Men, på 2 ställen finns det "goto" kod.
Ska föröka ersätta "goto" med "while", "for" eller "do while" etc.
Är det någon som kan ge exempel på hur jag ska ändra i programmet.
Mvh
Urban
*** PROGRAM ***
#include <iostream>
#include <string>
#include "iodos.h"
using namespace std;
int main()
{
dos_console();
int totalVinst = 0, totalEven = 0, totalLose = 0;
// Inmatning av spelarNamn
string namn;
cout << "Skriv in ditt namn: ";
getline(cin, namn);
// spelarval 1,2,3.
spelarval:
srand ( time(0));
int val;
cout << endl << "Välj 1=sax, 2=påse, 3=sten: " << endl;
cin >> val;
if ( val == 1)
{
cout << namn << " valde sax";
}
else if ( val == 2)
{
cout << namn << " valde påse";
}
else if ( val == 3)
{
cout << namn << " valde sten";
}
else
{
cout << "Fel tal, försök igen" << endl;
goto spelarval;
}
// slumpval av datorn 1,2,3.
int dator = rand()%3 +1;
if (dator == 1)
{
cout << " - Datorn valde sax";
}
else if (dator == 2)
{
cout << " - Datorn valde påse";
}
else
{
dator == 3;
cout << " - Datorn valde sten";
}
// Variablar för vem som vann
if (val==1 && dator==2 || val==2 && dator==3 || val==3 && dator==1)
{
totalVinst ++;
cout << "\n*** Jag vann ***" << endl;
}
else if (val==1 && dator==3 || val==2 && dator==1 || val==3 && dator==2)
{
totalLose ++;
cout << "\n*** Datorn vann ***" << endl;
}
else
{
totalEven ++;
cout << "\n*** Oavgjort ***" << endl;
}
char svar;
cout << "Försöka igen: J/N ";
cin >> svar;
// Erbjuda mer spel eller avslut.
if ((svar == 'J') || (svar == 'j'))
{
cout << "\n*** Nytt Spel ***" << endl;
goto spelarval;
}
else // Skriver ut resultat och avslutar programmet
{
cout << endl << "Totala Vinster : " << totalVinst << endl;
cout << "Totala Oavgjorda : " << totalEven << endl;
cout << "Totala Förluster : " << totalLose << endl;
cout << "\nVälkommen åter" << endl;
}
return 0;
}Sv: Hjälp
spelarval;
srand ( time(0));
int val;
cout << endl << "Välj 1=sax, 2=påse, 3=sten: " << endl;
cin >> val;
if ( val == 1)
{
cout << namn << " valde sax";
}
else if ( val == 2)
{
cout << namn << " valde påse";
}
else if ( val == 3)
{
cout << namn << " valde sten";
}
else
{
cout << "Fel tal, försök igen" << endl;
goto spelarval;
}
blir
srand ( time(0));
int val = 1;
while(val>3 || val<0){
cout << endl << "Välj 1=sax, 2=påse, 3=sten: " << endl;
cin >> val;
if ( val == 1)
{
cout << namn << " valde sax";
}
else if ( val == 2)
{
cout << namn << " valde påse";
}
else if ( val == 3)
{
cout << namn << " valde sten";
}
else
{
cout << "Fel tal, försök igen" << endl;
}
}
eller möjligtvis:
srand ( time(0));
int val;
do {
cout << endl << "Välj 1=sax, 2=påse, 3=sten: " << endl;
cin >> val;
if ( val == 1)
{
cout << namn << " valde sax";
}
else if ( val == 2)
{
cout << namn << " valde påse";
}
else if ( val == 3)
{
cout << namn << " valde sten";
}
else
{
cout << "Fel tal, försök igen" << endl;
}
} while(val>3 || val<0)
do-while räknas som en något fulare variant av while, så undvik den om det går.
För nästa grej så lägger du allt fram till goto:n inom en while-loop.
Det är enklare att tänka åt "andra hållet".
Börja uppifrån, tänk neråt.
Alltså:
int main()
{
bool want_to_play = true;
while(want_to_play){
//play
}
}
-->
int main()
{
bool want_to_play = true;
while(want_to_play){
//get user input
//get computer choice
want_to_play = askquestion;
}
}
-->
int main()
{
bool want_to_play = true;
while(want_to_play){
while(user_input_is_bad){
//get user input
}
//get computer choice
want_to_play = askquestion;
}
}
-->
int main()
{
bool want_to_play = true;
while(want_to_play){
while(user_input_is_bad){
//get user input
}
computer = 3*double(rand/RAND_MAX) + 1;
//print computer choice
//print winner
//print question
cin >> want_to_play;
}
}
Då blir programmen snyggare. Undvik också horder av ifsatser om det går. Gör hellre mer generella grej så fort du komemr på hur.
I ditt fall skulle jag till exempel säga att datorn vinner om
(spelare + 1) % 3 == dator
Och jag skulle istället för en ifsats med tre alternativ (där den sista dator == 3 är helt onödig):
if (dator == 1)
{
cout << " - Datorn valde sax";
}
else if (dator == 2)
{
cout << " - Datorn valde påse";
}
else
{
dator == 3;
cout << " - Datorn valde sten";
}
skriva:
<code>
vector<string> choices;
choices.push_back("sax");
choices.push_back("påse");
choices.push_back("sten");
cout << " - Datorn valde " << choices.at(dator + 1);
</code>
Alternativt med vanliga C-arrayer om du inte känner till vector än. Koden blir betydligt lättare att förstå, och därmed betydligt lättare att göra felfri.
PS.
Kom gärna på en bättre rubrik till tråden nästa gång.
Sv:Hjälp
Intressant att du visar flera alternativ.
Gissa om man blir lite impad...hi,hi.
Har bytt ut en del men jag får det inte riktigt att fungera.
Får följande fel !!
Error E2378 test4.cpp 54: Do-while statement missing ; in function main()
Error E2378 test4.cpp 77: Do-while statement missing ; in function main()
Error E2451 test4.cpp 98: Undefined symbol 'svar' in function main()
Ser du vad jag har gjort för fel?
Mvh
Urban
*** Program ***
#include <iostream>
#include <string>
#include "iodos.h"
using namespace std;
int main()
{
dos_console();
int totalVinst = 0, totalEven = 0, totalLose = 0;
// Inmatning av spelarNamn
string namn;
cout << "Skriv in ditt namn: ";
getline(cin, namn);
// spelarval 1,2,3.
spelarval:
srand ( time(0));
int val = 1;
do{
cout << endl << "Välj 1=sax, 2=påse, 3=sten: " << endl;
cin >> val;
if ( val == 1)
{
cout << namn << " valde sax";
}
else if ( val == 2)
{
cout << namn << " valde påse";
}
else if ( val == 3)
{
cout << namn << " valde sten";
}
else
{
cout << "Fel tal, försök igen" << endl;
}
} while(val>3 || val<0)
// slumpval av datorn 1,2,3.
srand ( time(0));
int dator = 1;
do
{
if (dator == 1)
{
cout << " - Datorn valde sax";
}
else if (dator == 2)
{
cout << " - Datorn valde påse";
}
else
{
dator == 3;
cout << " - Datorn valde sten";
}
}
while(dator>3 || dator<0)
// Variablar för vem som vann
if (val==1 && dator==2 || val==2 && dator==3 || val==3 && dator==1)
{
totalVinst ++;
cout << "\n*** Jag vann ***" << endl;
}
else if (val==1 && dator==3 || val==2 && dator==1 || val==3 && dator==2)
{
totalLose ++;
cout << "\n*** Datorn vann ***" << endl;
}
else
{
totalEven ++;
cout << "\n*** Oavgjort ***" << endl;
}
// Erbjuda mer spel eller avslut.
char svar;
cout << "Försöka igen: J/N ";
cin >> svar;
if (svar == 'J' || svar == 'j')
{
cout << "\n*** Nytt Spel ***" << endl;
}
else // Skriver ut resultat och avslutar programmet
{
cout << endl << "Totala Vinster : " << totalVinst << endl;
cout << "Totala Oavgjorda : " << totalEven << endl;
cout << "Totala Förluster : " << totalLose << endl;
cout << "\nVälkommen åter" << endl;
}
return 0;
}