Permalänk
Medlem

c++, hjälp med do while

Får inte till min do while sats, är också osäker på om "char svar;" fungerar som det ska ....

#include<iostream> #include<conio.h> #include<ctime> using namespace std; int slumptal(); int main() { int slumptal; int tal; int antgiss=0; int maxgiss=5; // Du har 5 gissningar char svar; int antspel=0; int vinst=0; int forlust=0; srand(time(NULL)); // Ta fram startvärde för slumptalen. Skrivs en gång i början av programmet do { srand(time(0)); slumptal = (rand() % 10)+1; // Slumpar fram ett tal mellan 1 och 10 cout<<" Gissa ett tal mellan 1 och 5: "; cin>>tal; antgiss++, antspel++; while(tal != slumptal) // om du gissat fel { while(antgiss < maxgiss && tal != slumptal) // om du har gissningar kvar och gissat fel { cout<<" Fel, gissa igen: "; cin>>tal; antgiss++; continue; cout<<"konstigt"<<endl; } if(maxgiss < antgiss) // Om du inte har gissningar kvar { cout<<" Du har förlorat "<<endl; forlust++; break; } break; } while( tal == slumptal) // Om du gissat rätt { cout<<" Du har vunnit!! Vill du spela igen? J/j "; vinst++, cin>>svar; } } while(svar != 'n'); // Vid 'n' fortsätt på nästa rad cout<<" Program slut "<<endl; cout<<" Du har spelat "<<antspel<<" gånger. "<<endl; cout<<" Du har vunnit "<<vinst<<" gånger. "<<endl; cout<<" Du har förlorat "<<forlust<<" gånger. "<<endl; getch(); return 0; }

Permalänk

Ska inte while(svar != 'n'); sitta på slutet av do-loopen?
alltså:
do
{

}while

?

Visa signatur

Insert funny joke here

Permalänk
Medlem
Skrivet av Slaktardej:

Ska inte while(svar != 'n'); sitta på slutet av do-loopen?
alltså:
do
{

}while

?

Den gör ju de?

}while

eller

}
while

ska väl inte spela någon roll tror jag...

Permalänk
Skrivet av iframbka:

Den gör ju de?

}while

eller

}
while

ska väl inte spela någon roll tror jag...

Vet faktiskt inte, läraren jag har sa åt oss att man skulle sätta den på sluttecknet för do, men jag vet inte. Chansade på det.

Edit: Funktionen slumptal();, har du skrivit den? Kan man få se den också?

Visa signatur

Insert funny joke here

Permalänk
Medlem

Varför inte bara använda sig utav en if-sats?
(du slumpar för övrigt ett tal mellan 1-10 men säger att man ska gissa mellan 1-5)

Slumpa numret
Ta in gissningen
Kolla med if-sats om gissning = slumptalet
Om sant grattis
Om inte öka antal gissningar gjorda

edit: en for-loop med antal gissningar man har skulle jag inte heller se som en dålig idé

Permalänk
Medlem
Skrivet av Dax123:

Varför inte bara använda sig utav en if-sats?
(du slumpar för övrigt ett tal mellan 1-10 men säger att man ska gissa mellan 1-5)

Slumpa numret
Ta in gissningen
Kolla med if-sats om gissning = slumptalet
Om sant grattis
Om inte öka antal gissningar gjorda

a glömde ändra talen innan jag postade, sitter å ändrar talet för att se om saker stämmer..
för att om man vinner eller förlorar ska programmet fråga om man vill spela igen? vid ja ska programmet gå tillbaka till "Gissa ett tal mellan x - y" och inte skriva ut "Fel, gissa igen"..?

Permalänk
Medlem
Skrivet av iframbka:

a glömde ändra talen innan jag postade, sitter å ändrar talet för att se om saker stämmer..
för att om man vinner eller förlorar ska programmet fråga om man vill spela igen? vid ja ska programmet gå tillbaka till "Gissa ett tal mellan x - y" och inte skriva ut "Fel, gissa igen"..?

Börja med att sätta svaret om man vill fortsätta till sant
Sätt hela koden i while fortsätta = sant
Fråga i slutet av koden om man vill fortsätta

Så skulle jag ha gjort iaf

Permalänk
Medlem
Skrivet av Dax123:

Börja med att sätta svaret om man vill fortsätta till sant
Sätt hela koden i while fortsätta = sant
Fråga i slutet av koden om man vill fortsätta

Så skulle jag ha gjort iaf

Det är väl det jag gjort sätter allt i do while satsen, och i slutet är villkoret för om man fortsätter på nästa rad eller börjar om??

Permalänk
Medlem
Skrivet av iframbka:

Det är väl det jag gjort sätter allt i do while satsen, och i slutet är villkoret för om man fortsätter på nästa rad eller börjar om??

My bad, tror även att man inte blir förfrågad om att spela igen om man inte vinner, eller det kanske ska vara så?

här är en liten snabb grej jag drog ihop

skaffa:

maxgiss
char svar[] = "j";

while (svar = "j")
{
skaffa random nummer här

for( int antgiss = 1; antgiss < maxgiss; antgiss++)
{

ta in gissning

om gissning = slumptal
break (ut ur for-loopen, sätt antgiss = maxgiss)

else
skriv ut "fel"

}

om gissning = slumptal vinst++

else forlust++

antspel++
spela igen? j/n
cin svar

}
program slut

Dold text
Permalänk
Medlem

Tycker all förslag på kod mer eller mindre har felaktigheter och dylikt.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem
Skrivet av NoPaiN^:

Tycker all förslag på kod mer eller mindre har felaktigheter och dylikt.

Jo... har du nått förslag då? sitter verkligen fast här... stirrat mig blind på det här

Permalänk
Medlem
Skrivet av Dax123:

My bad, tror även att man inte blir förfrågad om att spela igen om man inte vinner, eller det kanske ska vara så?

här är en liten snabb grej jag drog ihop

skaffa:

maxgiss
char svar[] = "j";

while (svar = "j")
{
skaffa random nummer här

for( int antgiss = 1; antgiss < maxgiss; antgiss++)
{

ta in gissning

om gissning = slumptal
break (ut ur for-loopen, sätt antgiss = maxgiss)

else
skriv ut "fel"

}

om gissning = slumptal vinst++

else forlust++

antspel++
spela igen? j/n
cin svar

}
program slut

Dold text

Nej vet att man inte blir det. Det ska vara så att man blir förfrågad om man vill spela igen även om man förlorar. Men har än så länge inte brytt mig om det. försöker få resten att stämma...

Permalänk

En if sats känns mer logisk än att köra while satser på alla delar

do { srand(time(0)); slumptal = rand() % 5 + 1; // Slumpar fram ett tal mellan 1 och 5 antalspel++; cout<<" Gissa ett tal mellan 1 och 5: "; while(true) { cin>>tal; antgiss++; if( tal == slumptal) // Om du gissat rätt { cout<<" Du har vunnit!! Vill du spela igen? J/j "; vinst++, cin>>svar; break; } else if(maxgiss < antgiss) // Om du inte har gissningar kvar { cout<<" Du har förlorat "<<endl; forlust++; // spela igen? break; } } } while(svar != 'n');

Visa signatur

Every time I see some piece of medical research saying that caffeine is good for you, I high-five myself. Because I'm going to live forever.
~ Linus Torvalds (2010-08-03)

Permalänk
Skrivet av iframbka:

Får inte till min do while sats, är också osäker på om "char svar;" fungerar som det ska ....

#include<iostream> #include<conio.h> #include<ctime> using namespace std; int slumptal(); int main() { int slumptal; int tal; int antgiss=0; int maxgiss=5; // Du har 5 gissningar char svar; int antspel=0; int vinst=0; int forlust=0; srand(time(NULL)); // Ta fram startvärde för slumptalen. Skrivs en gång i början av programmet do { srand(time(0)); slumptal = (rand() % 10)+1; // Slumpar fram ett tal mellan 1 och 10 cout<<" Gissa ett tal mellan 1 och 5: "; cin>>tal; antgiss++, antspel++; while(tal != slumptal) // om du gissat fel { while(antgiss < maxgiss && tal != slumptal) // om du har gissningar kvar och gissat fel { cout<<" Fel, gissa igen: "; cin>>tal; antgiss++; continue; cout<<"konstigt"<<endl; } if(maxgiss < antgiss) // Om du inte har gissningar kvar { cout<<" Du har förlorat "<<endl; forlust++; break; } break; } while( tal == slumptal) // Om du gissat rätt { cout<<" Du har vunnit!! Vill du spela igen? J/j "; vinst++, cin>>svar; } } while(svar != 'n'); // Vid 'n' fortsätt på nästa rad cout<<" Program slut "<<endl; cout<<" Du har spelat "<<antspel<<" gånger. "<<endl; cout<<" Du har vunnit "<<vinst<<" gånger. "<<endl; cout<<" Du har förlorat "<<forlust<<" gånger. "<<endl; getch(); return 0; }

while (tal != slumptal && maxgiss > antgiss) { //Loopar så länge du har gissningar kvar och talet inte är rätt cout << "Fel, gissa igen: "; cin>>tal; antgiss++; } //Hit kommer du när gissningarna är slut eller du har gissat rätt. if (maxgiss < antgiss) { cout << "Du har förlorat.\n"; } else { cout << "Du har vunnit!"; }

Du bör också se över dina variabelnamn. Det finns ingen anledning att använda förkortningar, bättre att vara tydlig. Exempel: antalGissningar, maxAntalGissningar.

Visa signatur

6600K@4,5GHz 1,25V | EVGA 980Ti | Samsung 950 Pro m.2

Permalänk
Medlem
Skrivet av tomten_alle:

Du bör också se över dina variabelnamn. Det finns ingen anledning att använda förkortningar, bättre att vara tydlig. Exempel: antalGissningar, maxAntalGissningar.

Eller rent av lära sig följa en namnstandard och skippa svenska helt, fattar inte varför skolor och utbildningar fortfarande inte lär ut detta.
Det går väl ut på att lära ungdomarna och förbereda dem för arbetslivet.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770