Gå til innhold

[Løst] stein saks papir C++


Anbefalte innlegg

Hei, jeg har prøvd å lage min egen lille versjon av stein saks papir i C++, men jeg får en error når jeg compiler den.

 

#include <cstdlib>
#include <iostream>
#include <string>
#include <ctime>

using namespace std;

int main()
{
   srand(static_cast<unsigned int> (time(0)));
   enum fields {WORD, NUM_FIELDS};
   const int NUMBE = 3;
   const string [WORDS][NUMBE][NUM_Fields] =
{
   ("rock")
   ("paper")
   ("scizzors")
}


   char again = 'y'

   cout << "Rock, Paper, Scizzors!\n";


   while (again == 'y')
   {
   int play = (rand() % NUMBE);
   string theComputer = WORDS [play][word];
   string guess;

   cout << "\nEnter your choice of item: ";
   cin >> guess
   std::cin.get();
   cout << "\nThe computer's choice is ";
   cout << the Computer << ".";
   std::cin::get();

         if ((guess == "rock") && (play ==2))
         {
              cout << "\nRock crushes Scizzors! YOU WON!\n";
         }
         else if (guess == "rock" && play ==1)
         {
              cout << "\nPaper beats Rock! you lose.\n";
         }
         else if (guess == "rock" && play == 0)
         {
              cout << "\nIt's a Tie!\n";
         }
         else if (guess == "paper" && play == 0)
         {
              cout << "\nPaper beats Rock! YOU WIN!\n";
         }
         else if (guess == "paper" && play == 1)
         {
              cout << "\nIt's a Tie!\n"
         }
         else if (guess == "paper" && play 2)
         {
              cout << "\nScizzors cuts Paper. you lose\n";
         }
         else if (guess == "scizzors" && play 1)
         {
              cout << "\nScizzors cuts Paper! YOU WIN!\n";
         }
         else if (guess == "scizzors" && play 0)
         {
              cout << "\nRock crushes scizzors. you lose\n"
         }
         else if (guess == "scizzors" && play 2)
         {
              cout << "\nIt's a Tie!n\";
         }
         else
         {
             cout << "\n sorry, you can't answer that.\n"
         }
   std::cin.get();

   cout << " wanna play again? (y/n): ";
   cin >> again;

}
std::cin.get();

    return EXIT_SUCCESS
}


 

Erroren er denne linjen:

{

srand(static_cast<unsigned int> (time(0)));

enum fields {WORD, NUM_FIELDS};

const int NUMBE = 3;

const string [WORDS][NUMBE][NUM_Fields] =

{

("rock")

("paper")

("scizzors")

}

 

Noen som har noen anelse om hva feilen kan være?

Endret av AwsmPineapple
Lenke til kommentar
Videoannonse
Annonse

Nå, jeg er ikke en mester i programmering, har så vidt startet, men jeg la merke til noe når jeg fikk epostvarsel om dette emne, og det var dette, som jeg antar bare må være feil:

 

"

srand(static_cast<unsigned int> (time(0)));

enum fields {WORD, NUM_FIELDS};

const int NUMBE = 3;

const string [WORDS][NUMBA][NUM_Fields] =

 

"

 

Som du ser har du her skrevet [NUMB!A!] mens konstanten din er NUMB!E!.

 

Når jeg leser emnet ditt så ser jeg at det der står NUMBE, så jeg er usikker hvorfor det står noe annet i eposten jeg fikk. Men fortell meg gjerne om jeg tar feil, det ville vært isåfall ganske logisk den korrekte feilen.

Lenke til kommentar

    enum fields {WORD, NUM_FIELDS};
   const int NUMBE = 3;
   const string [WORDS][NUMBE][NUM_Fields] =

 

her har du i enum kalt den for "WORD" mens du senere bruker "WORDS". Du har også kallt den ene "NUL_FIELDS", mens du senere bruker "NUM_Fields"

 

          else if (guess == "scizzors" && play 2)
         {
              cout << "\nIt's a Tie!n\";
         }

 

Her er deg og en feil, det skal vel være:

cout << "\nIt's a Tie!\n";

Endret av etse
Lenke til kommentar

Gikk gjennom koden din og fikset en HAU av slurvefeil:

 

1: DU hadde glemt semikolon MANGE plasser

2: Du hadde glemt komma her:

    const string [WORDS][NUMBE][NUM_Fields] =
{
   ("rock"),
   ("paper"),
   ("scizzors")
};

3: Samme plassen hadde du klammeparanteser rundt WORDS, som er navnet på stringen

4: NUM_FIELDS skulle skrives med bare store bokstaver.

5: WORDS er 0, dett er en ugyldig verdi for et array.

6: Du har brukt "using namespace std;" alikavel har du std:: forran mange kommandoer.

7: string theComputer = WORDS[play][WORD]; her hadde du skrevet word, altså brukt små bokstaver

8: cout << the Computer << "."; Du har et mellomrom for mye her.

9: else if (guess == "paper" && play 2) Her har du glemt å ha play==2 (og lignende i mange under)

10: return EXIT_SUCCESS her har du glemt semikolon.

 

Fullstendig kode:

#include <cstdlib>
#include <iostream>
#include <string>
#include <ctime>

using namespace std;

int main()
{
   srand(static_cast<unsigned int> (time(0)));
   enum fields {WORD=1, NUM_FIELDS};
   const int NUMBE = 3;
   const string WORDS[NUMBE][NUM_FIELDS] =
{
   ("rock"),
   ("paper"),
   ("scizzors")
};


   char again = 'y';

   cout << "Rock, Paper, Scizzors!\n";


   while (again == 'y')
   {
	int play = (rand() % NUMBE);
	string theComputer = WORDS[play][WORD];
	string guess;

	cout << "\nEnter your choice of item: ";
	cin >> guess;
	cin.get();
	cout << "\nThe computer's choice is ";
	cout << theComputer << ".";
	cin.get();

         if ((guess == "rock") && (play ==2))
         {
              cout << "\nRock crushes Scizzors! YOU WON!\n";
         }
         else if (guess == "rock" && play ==1)
         {
              cout << "\nPaper beats Rock! you lose.\n";
         }
         else if (guess == "rock" && play == 0)
         {
              cout << "\nIt's a Tie!\n";
         }
         else if (guess == "paper" && play == 0)
         {
              cout << "\nPaper beats Rock! YOU WIN!\n";
         }
         else if (guess == "paper" && play == 1)
         {
              cout << "\nIt's a Tie!\n";
         }
         else if (guess == "paper" && play == 2)
         {
              cout << "\nScizzors cuts Paper. you lose\n";
         }
         else if (guess == "scizzors" && play == 1)
         {
              cout << "\nScizzors cuts Paper! YOU WIN!\n";
         }
         else if (guess == "scizzors" && play == 0)
         {
              cout << "\nRock crushes scizzors. you lose\n";
         }
         else if (guess == "scizzors" && play == 2)
         {
              cout << "\nIt's a Tie!\n";
         }
         else
         {
             cout << "\n sorry, you can't answer that.\n";
         }
	cin.get();
	cout << " wanna play again? (y/n): ";
	cin >> again;

}
cin.get();
   return EXIT_SUCCESS;
}

  • Liker 1
Lenke til kommentar

Gikk gjennom koden din og fikset en HAU av slurvefeil:

 

1: DU hadde glemt semikolon MANGE plasser

2: Du hadde glemt komma her:

    const string [WORDS][NUMBE][NUM_Fields] =
{
   ("rock"),
   ("paper"),
   ("scizzors")
};

3: Samme plassen hadde du klammeparanteser rundt WORDS, som er navnet på stringen

4: NUM_FIELDS skulle skrives med bare store bokstaver.

5: WORDS er 0, dett er en ugyldig verdi for et array.

6: Du har brukt "using namespace std;" alikavel har du std:: forran mange kommandoer.

7: string theComputer = WORDS[play][WORD]; her hadde du skrevet word, altså brukt små bokstaver

8: cout << the Computer << "."; Du har et mellomrom for mye her.

9: else if (guess == "paper" && play 2) Her har du glemt å ha play==2 (og lignende i mange under)

10: return EXIT_SUCCESS her har du glemt semikolon.

 

 

TAKK!

dette er min første "fullstendige" kode.... + feil

men....

hva skjer når man kjører filen?

http://www.mediafire.com/?mh8pcc6edvfctg3

OBS! Norton tror dette er et virus -.-'

 

det ble ikke helt slik jeg hadde tenkt det...

testet det og skrev papir. computer fikk papir, så stod det Rock beats paper!.

 

det som skjer er at scissors ender opp med å bli displayet som punktum. hva er feil?

 

det er noen småfeil om at pcen tror paper er rock. noe forslag?

Endret av AwsmPineapple
Lenke til kommentar

legger merke til at du har flere feil i koden din:

 

    enum fields {WORD=1, NUM_FIELDS};
   const int NUMBE = 3;
   const string WORDS[NUMBE][NUM_FIELDS] =
{
   ("rock"),
   ("paper"),
   ("scizzors")
};

Hvorfor har du et 2.dimensjonalt array her? Ser ingen grunn til det. Endrer dette til:

    const int NUM_FIELDS = 3;
   const string WORDS[NUM_FIELDS] =
{
	("rock"),
	("paper"),
	("scizzors")
};

 

Denne endringen gjør at jeg også må endre til dette:

		int play = (rand() % NUM_FIELDS);
	string theComputer = WORDS[play];

 

Fjerner alle linjene med "cin.get()" da de er unødvendige.

 

Fullstendig kode finner du her: http://pastesite.com/30883

Denne skal funke helt slik du vil ha den.

Lenke til kommentar

Hvis du bruker BÅDE "using namespace std"

 

og skriver std:: foran kommandoer regner jeg nesten at du bare skriver av programmet fra noen andre? using namespace std sier jo at den skal hente alle standard-kommandoene fra std:: automatisk, så du slipper å skrive std::cout og std::cin hele tiden. Rart du blander dem da. :p

Lenke til kommentar

Hvis du bruker BÅDE "using namespace std"

 

og skriver std:: foran kommandoer regner jeg nesten at du bare skriver av programmet fra noen andre? using namespace std sier jo at den skal hente alle standard-kommandoene fra std:: automatisk, så du slipper å skrive std::cout og std::cin hele tiden. Rart du blander dem da. :p

 

er ganske ny på dette, og jeg prøver å skrive min egen "test" ut ifra en bok.

programmet står ikke i boken, men mange andre eksempler, så jeg prøvde å lage mitt eget programm utifra hva jeg hittil har lært.

derfor er det så mange feil xD

Lenke til kommentar

legger merke til at du har flere feil i koden din:

 

    enum fields {WORD=1, NUM_FIELDS};
   const int NUMBE = 3;
   const string WORDS[NUMBE][NUM_FIELDS] =
{
   ("rock"),
   ("paper"),
   ("scizzors")
};

Hvorfor har du et 2.dimensjonalt array her? Ser ingen grunn til det. Endrer dette til:

    const int NUM_FIELDS = 3;
   const string WORDS[NUM_FIELDS] =
{
	("rock"),
	("paper"),
	("scizzors")
};

 

Denne endringen gjør at jeg også må endre til dette:

		int play = (rand() % NUM_FIELDS);
	string theComputer = WORDS[play];

 

Fjerner alle linjene med "cin.get()" da de er unødvendige.

 

Fullstendig kode finner du her: http://pastesite.com/30883

Denne skal funke helt slik du vil ha den.

 

Tusen takk :)

fikset koden helt. funker som den skal nå :D

Lenke til kommentar

Åååja. Da har vel boka forklart litt dårlig hva using namespace gjør :) Eller så har du hoppet litt langt fremover. Alle kommandoene man bruker ligger i store tekstfiler, eller namespaces. Når man skriver using namespace std; øverst, slipper man å spesifisere hvilken namespace-fil den skal finne kommandoen i resten av programmet. Er vel forskjellige namespace-filer også, så man må spesifisere alle sammen i starten ellers får du error på visse kommandoer.

 

Synes egentlig det er ganske tullete, men det har vel sine grunner basert i 80-tallet et sted.

 

#include <iostream>, <string> osv er også samlinger med kommandoer for inn og ut-operasjoner, så hvis ikke de er inkludert i starten skjønner ikke compileren hva kommandoene du har skrevet betyr.

Lenke til kommentar

men siden koden nå er løst, er det noen som har noe peiling på hvordan man kan eventuelt legge et program oppe på et annet?

 

f.eks lage et poeng system oppe i høyre hjørne?

kunne dette hvert mulig?

 

har lest i boken at det er mulig å lage et

teller system som kan øke (+) eller synke (-) utifra programmet.

noen som har en idè på hvordan man kan gjøre det?

Lenke til kommentar

Åååja. Da har vel boka forklart litt dårlig hva using namespace gjør :) Eller så har du hoppet litt langt fremover. Alle kommandoene man bruker ligger i store tekstfiler, eller namespaces. Når man skriver using namespace std; øverst, slipper man å spesifisere hvilken namespace-fil den skal finne kommandoen i resten av programmet. Er vel forskjellige namespace-filer også, så man må spesifisere alle sammen i starten ellers får du error på visse kommandoer.

 

Synes egentlig det er ganske tullete, men det har vel sine grunner basert i 80-tallet et sted.

 

#include <iostream>, <string> osv er også samlinger med kommandoer for inn og ut-operasjoner, så hvis ikke de er inkludert i starten skjønner ikke compileren hva kommandoene du har skrevet betyr.

okei, boken er på engelsk, og jeg er amatør, så det er ikke alt jeg får med meg i boken ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...