AwsmPineapple Skrevet 24. januar 2012 Del Skrevet 24. januar 2012 (endret) 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 24. januar 2012 av AwsmPineapple Lenke til kommentar
Amici Skrevet 24. januar 2012 Del Skrevet 24. januar 2012 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
etse Skrevet 25. januar 2012 Del Skrevet 25. januar 2012 (endret) 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 25. januar 2012 av etse Lenke til kommentar
Bytex Skrevet 25. januar 2012 Del Skrevet 25. januar 2012 Du har også stavet Scissors feil hele veien. Fiks det også. Lenke til kommentar
AwsmPineapple Skrevet 25. januar 2012 Forfatter Del Skrevet 25. januar 2012 vet ikke helt problemet, har 3 errors. 2 på denne linja: const string [WORD], [NUMBE] [NUM_FIELDS] = og 1 på denne linja: std::cin.get(); return EXIT_SUCCESS; } altså på den siste } som skal vise at alt er i samme "boks" Lenke til kommentar
etse Skrevet 25. januar 2012 Del Skrevet 25. januar 2012 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; } 1 Lenke til kommentar
AwsmPineapple Skrevet 25. januar 2012 Forfatter Del Skrevet 25. januar 2012 (endret) 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 25. januar 2012 av AwsmPineapple Lenke til kommentar
etse Skrevet 25. januar 2012 Del Skrevet 25. januar 2012 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
Bytex Skrevet 25. januar 2012 Del Skrevet 25. januar 2012 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. Lenke til kommentar
AwsmPineapple Skrevet 25. januar 2012 Forfatter Del Skrevet 25. januar 2012 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. 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
AwsmPineapple Skrevet 25. januar 2012 Forfatter Del Skrevet 25. januar 2012 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å Lenke til kommentar
Bytex Skrevet 25. januar 2012 Del Skrevet 25. januar 2012 Ååå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
AwsmPineapple Skrevet 25. januar 2012 Forfatter Del Skrevet 25. januar 2012 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
AwsmPineapple Skrevet 25. januar 2012 Forfatter Del Skrevet 25. januar 2012 Ååå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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå