[C++] Jag tänker på ett tal, ge användaren 10 chanser

Permalänk
Medlem

[C++] Jag tänker på ett tal, ge användaren 10 chanser

Sitter och skriver en C++ uppgift där man slumpar ett tal och sedan ger användaren 10 chanser att gissa rätt. Jag har fixat delen med att slumpa och så vidare men hur gör jag om jag vill ge användaren 10 chanser att gissa rätt?

#include <iostream> #include <time.h> #include <cstdlib> using namespace std; void main(void) { srand(time(0)); int number; number=rand()%99+1; int guess; cout<<"I'm thinking of a number between 1 and 99, take a guess"<<endl; do{ cin>>guess; if (guess > number) cout<<guess<<" is to high, try again"<<endl; else if (guess < number) cout<<guess<<" is to low, try again"<<endl; else cout<<"Congratulations "<<guess<<" is the number I was thinking of"<<endl; } while (guess != number); }

Permalänk
Medlem

Jag är ingen expert inom programmering men min tanke är att du får lägga till en funktion som börjar på 0 och räknar uppåt vid varje gissning och när den har ökat 10 gånger så får den skriva ut att användaren har förlorat, en while-loop som kanske kör hela din funktion?

Permalänk
Medlem

Ha en räknare för antalet försök och bryt loopen om rätt svar ges eller om räknaren överstiger 10.

Visa signatur

WS: Antec P182B | FSP Aurum 500W | Asus P8Z77-V PRO | i5 3570k | 16GB DDR3 | Intel 320 80GB SSD | HDD 5TB | Asus Xonar DX | Arch Linux (x86_64) | Eizo EV2795
HTPC: Philips 50PUS8804, Kodi samt extern usb-disk
Server: Raspberry Pi 3 model B+ | 1GB RAM | HDD 750GB | Arch Linux (armv7h)

Permalänk
Medlem
Skrivet av Shrimpey:

Jag är ingen expert inom programmering men min tanke är att du får lägga till en funktion som börjar på 0 och räknar uppåt vid varje gissning och när den har ökat 10 gånger så får den skriva ut att användaren har förlorat, en while-loop som kanske kör hela din funktion?

Tror att jag kan ha löst det

#include <iostream> #include <time.h> #include <cstdlib> using namespace std; void main(void) { srand(time(0)); int number; number=rand()%99+1; int gissningar = 0; int guess; cout<<"I'm thinking of a number between 1 and 99, take a guess"<<endl; do{ cin>>guess; gissningar ++; if (guess > number) cout<<guess<<" is to high, try again"<<endl; else if (guess < number) cout<<guess<<" is to low, try again"<<endl; else cout<<"Congratulations "<<guess<<" is the number I was thinking of"<<endl; } while (guess != number && gissningar < 10); }

Permalänk
Medlem

Jag gjorde ett liknande spel fast med hänga gubbe, där hade jag en INT variabel som jag använde för att räkna antalet chanser/liv.
Varje gång spelaren svarade fel så drog jag bort 1(liv) ifrån den variabeln och detta höll på enda tills variabeln fick värdet 0.

Jag skulle rekommendera att gör minst en till metod som du kan loopa igenom varje gång spelaren gissar, och där sköter du allt räknande.

Permalänk
Medlem
Skrivet av cjal:

Tror att jag kan ha löst det

#include <iostream> #include <time.h> #include <cstdlib> using namespace std; void main(void) { srand(time(0)); int number; number=rand()%99+1; int gissningar = 0; int guess; cout<<"I'm thinking of a number between 1 and 99, take a guess"<<endl; do{ cin>>guess; gissningar ++; if (guess > number) cout<<guess<<" is to high, try again"<<endl; else if (guess < number) cout<<guess<<" is to low, try again"<<endl; else cout<<"Congratulations "<<guess<<" is the number I was thinking of"<<endl; } while (guess != number && gissningar < 10); }

Du kan knycka raden "gissningar++" och baka in i while-satsen:

} while (++gissningar < 10 && guess != number);

++ framför variabeln innebär att värdet ökas med ett innan den kontrollerar värdet och gör jämförelsen. Sen ser det lite udda ut med en variabel på svenska när resten är på engelska. Kanske döpa om den till "tries"?

Visa signatur

WS: Antec P182B | FSP Aurum 500W | Asus P8Z77-V PRO | i5 3570k | 16GB DDR3 | Intel 320 80GB SSD | HDD 5TB | Asus Xonar DX | Arch Linux (x86_64) | Eizo EV2795
HTPC: Philips 50PUS8804, Kodi samt extern usb-disk
Server: Raspberry Pi 3 model B+ | 1GB RAM | HDD 750GB | Arch Linux (armv7h)

Permalänk
Medlem
Skrivet av '[vEX:

;12838010']Du kan knycka raden "gissningar++" och baka in i while-satsen:

} while (++gissningar < 10 && guess != number);

++ framför variabeln innebär att värdet ökas med ett innan den kontrollerar värdet och gör jämförelsen. Sen ser det lite udda ut med en variabel på svenska när resten är på engelska. Kanske döpa om den till "tries"?

Fixade det till, tack så mycket

Permalänk
Medlem

Min kod ser just nu ut såhär

#include <iostream> #include <time.h> #include <cstdlib> using namespace std; void main(void) { srand(time(0)); int number; number=rand()%99+1; int tries = 0; int guess; cout<<"I'm thinking of a number between 1 and 99, take a guess"<<endl; do{ cin>>guess; if (guess > number) cout<<guess<<" is to high, try again"<<endl; else if (guess < number) cout<<guess<<" is to low, try again"<<endl; else cout<<"Congratulations "<<guess<<" is the number I was thinking off"<<endl; } while (guess != number && ++tries < 10); }

Hade dock velat se till att det skrevs ut något i stil med "You have 1 last chance to guess the number I'm thinking off" när spelaren har 1 försök kvar.

testade

while (tries == 9)

men det resulterade i att programmet stannade på 9onde försöket, någon som har förslag på hur jag kan lösa detta?

Edit: Hade

while (guess != number && ++tries < 10);

på tries < 9 när jag testade med while loopen

Permalänk
Medlem
Skrivet av cjal:

Min kod ser just nu ut såhär

#include <iostream> #include <time.h> #include <cstdlib> using namespace std; void main(void) { srand(time(0)); int number; number=rand()%99+1; int tries = 0; int guess; cout<<"I'm thinking of a number between 1 and 99, take a guess"<<endl; do{ cin>>guess; if (guess > number) cout<<guess<<" is to high, try again"<<endl; else if (guess < number) cout<<guess<<" is to low, try again"<<endl; else cout<<"Congratulations "<<guess<<" is the number I was thinking off"<<endl; } while (guess != number && ++tries < 10); }

Hade dock velat se till att det skrevs ut något i stil med "You have 1 last chance to guess the number I'm thinking off" när spelaren har 1 försök kvar.

testade

while (tries == 9)

men det resulterade i att programmet stannade på 9onde försöket, någon som har förslag på hur jag kan lösa detta?

while är ju en loop. Det betyder att så länge som tries är 9 så kommer koden i loopen att köras.

Visa signatur

|AMD Ryzen 9 5900X| |ASUS ROG Strix B550-F| |Crucial Ballistix 32GB CL16@3600MHz| |PNY RTX 4090 XLR8 Gaming| |Samsung 970 Evo Plus M.2 1TB| |Samsung 860 Evo 1TB| |Samsung 850 Evo 500GB| |Corsair RM1000| |Fractal Design Define R5| |LG OLED 48" C2 Evo|

Permalänk
Medlem
Skrivet av Devil May Cry:

while är ju en loop. Det betyder att så länge som tries är 9 så kommer koden i loopen att köras.

Känner mig som en idiot för att jag inte insåg det tidigare. Tack för svaret

Permalänk
Medlem

1: Ser ut som ett bra tillfälle att använda en "for" loop. Mycket mera naturligt här än "do while".

2: Det är en god idé att se över din indentering, i små program spelar det inte så stor roll men när programmen växer blir läsbarhet a och o.

Visa signatur

Chasi: Thermaltake XaserVI LBNS | Mobo: P9X79 PRO
Cpu: SB-E 3930k 4.8ghz @ 1.34v | Kylning: 2x Laing DCC, EK supreme HF Cu, 45*60cm nissan bilkylare.
Ram: 6x4GB G.skill 2133mhz cl11 | Disk: Samsung 830 256GB