c++ Sten Sax o Påse spel (konsoll applikation)

Tråden skapades och har fått 11 svar. Det senaste inlägget skrevs .
1

Hej håller på och gör ett sten sax o påse spel som en skoluppgift. Sitter i xcode och programmet skrivs procedurellt i c++. Har stött på lite problem.

1. Första problemet är när jag ska skriva ut vad man har gjort för val (sten sax eller påse). Se koden nedan

Citat:

int cchoice;
cin>>cchoice;

//Saves the users choice in a text string for later output
if (cchoice == 1)
ctchoice="stone";
else if (cchoice == 2)
ctchoice="sciccors";
else if (cchoice == 3);
ctchoice = "bag";


cout<<"You choosed "<<ctchoice<<"."<<endl;
[

Oavsett vad cchoice har för värde så skrivs bag ut.

2. Nästa fel är lite snarlikt. Har två olika felmeddelanden som aktiveras utav att en variabel sätts antingen till "m" eller "g". Problemet är bara att båda felmeddelandena skrivs ut om variabeln får antingen "m" eller "g".

Citat:

int game;
char error, mode;

if (error='m')
cout<<endl<<endl<<"The command you entered was not valid since ("<<mode<<") is not a valid command"<<endl; cout<<error<<endl;

if (error='g')
cout<<endl<<endl<<"You choosed ("<<game<<") wich is not a valid command since it is not a positive integer"<<endl;

3. Sedan undrar jag om man kan "pausa en utskrift". Alltså att test skrivs ut sedan måste användaren trycka på enter för att få se fortsättningen på texten.

Jag är tacksam för all hjälp. Kan vara så att jag inte tänker rätt och kanske måste börja tänka på lite annat sätt.

  • Medlem
  • Sundsvall
  • 2007-01-28 16:17
Ursprungligen av prinsen85:

Hej håller på och gör ett sten sax o påse spel som en skoluppgift. Sitter i xcode och programmet skrivs procedurellt i c++. Har stött på lite problem.

1. Första problemet är när jag ska skriva ut vad man har gjort för val (sten sax eller påse). Se koden nedan

Oavsett vad cchoice har för värde så skrivs bag ut.

2. Nästa fel är lite snarlikt. Har två olika felmeddelanden som aktiveras utav att en variabel sätts antingen till "m" eller "g". Problemet är bara att båda felmeddelandena skrivs ut om variabeln får antingen "m" eller "g".

3. Sedan undrar jag om man kan "pausa en utskrift". Alltså att test skrivs ut sedan måste användaren trycka på enter för att få se fortsättningen på texten.

Jag är tacksam för all hjälp. Kan vara så att jag inte tänker rätt och kanske måste börja tänka på lite annat sätt.

1. Det ska vara If. Else If och sist Else.
Inte else if två gånger.

3. Har för mig att det ska finnas en conio.h i C++ så man kan använda funktionen getch() gör att få Press any key funktionen. Annars har stdio getline()-funktionen.
I C hade jag använt getchar(); , kanske det finnas i C++ också.

Edit: cstdio i C++ ska ha getchar. googlade upp det.

Du har två ganska simpla fel som ger oförutsedda effekter, det ena är att du terminerar en if-sats med semikolon och det andra att du använder tilldelningssatser som villkor i if-satser när du borde ha jämförelseoperationer. Men var felen är någonstans och hur man rättar till dem får du ta reda på själv

  • Medlem
  • Mölndal
  • 2007-01-28 16:55

För att undvika det första felet (som är en skapligt irriterande egenskap hos C om du frågar mig) brukar jag alltid använda { och } vid if-satser, även om jag så bara ska utföra en enda kodrad.

  • Medlem
  • Stockholm
  • 2007-01-28 17:14

if (cchoice == 1)
ctchoice="stone";
else if (cchoice == 2)
ctchoice="sciccors";
else
ctchoice = "bag";

  • Medlem
  • Sundsvall
  • 2007-01-28 17:31

För att lägga till det som redan sagts samt en while loop.

while (cchoice >=1 && cchoice <=3) {
if (cchoice == 1) {
ctchoice="stone"; }
else if (cchoice == 2) {
ctchoice="scissors"; }
else {
ctchoice = "bag" }
}

Det är så typiskt man sitter och stirrar sg blind. Det där semicolonet borde jag sett. Skulle bara gått ifrån det en liten stund. Fast när man är lite stressad är det självklara svårt att se ibland. Tack så mycket för alla tips. Gött att få svar så snabbt. Har suttit mest på macworlds forum innan. Det är väl egentligen inget fel på det men sån här respons har jag inte varit med om förut. Im here to stay.

Ursprungligen av Sidde:

För att lägga till det som redan sagts samt en while loop.

while (cchoice >=1 && cchoice <=3) {
if (cchoice == 1) {
ctchoice="stone"; }
else if (cchoice == 2) {
ctchoice="scissors"; }
else {
ctchoice = "bag" }
}

Vad är anledningen till att man lägger till while satsen? Är jue ganska ny på det här.

  • Medlem
  • Sundsvall
  • 2007-01-28 17:54
Ursprungligen av prinsen85:

Vad är anledningen till att man lägger till while satsen? Är jue ganska ny på det här.

While-satsen är där för att blockera fel inmatning. Så måste uppge 1 till 3 för att komma vidare. Dock måste du modifiera koden lite där, för annars kommer du aldrig komma in i while-trädet såg jag. Eftersom du matar in koden före där. Du får nog ha en input mellan ifsatserna och while-loopen. Kanske om du vill uppge talet, avsluta eller liknande.

en till liten fråga när jag ändå är i farten. Blir lite rörigt nu när jag gör en konsoll applikation det är mycket text och för att särskilja de olika styckena använder jag "endl". Finns det något kommando som gör att skärmen töms innan nästa sak skrivs ut? Läste någonstans att det inte fanns i själva språket och att man fick anropa den funktionen från systemet.

Fick tips om att man skulle skriva.
cout << "\x1b[2J\x1b[H";
Men det funkar inte i terminalen. kan det bero på vilken teckeninställning jag har inställt på i xcode?

  • Medlem
  • Sundsvall
  • 2007-01-28 17:58

Med systemanrop
system("clear");

Annars kan du nog tillkalla funktionen genom curses.h
För då borde du ha clear();

Tack det fungerade kanon bra uppfattade det bara inte som att skärmen rensades då den fanns kvar högre upp i terminalen om man scrollade uppåt. Men blev gör bra.

Nu ska jag lägga till en .txt fil till mitt projekt där highscore och inlogg ska lagras. Det går jätte bra när man kör det i Xcode. Men om jag vill köra filen i terminalen så hittar han inte längre filen. Måste jag ange fullständig sökväg eller ska jag på något sätt inkludera den i "terminalfilen" som bildas?

1
Bevaka tråden