Hej! Till att börja med så har du gjort några fel:Lottorad i C++
Jag håller på med en uppgift där vi ska slumpa fram en lottorad med 7 nummer. Hur gör jag för att programmet inte ska slumpa fram samma tal igen?
Så här ser programmet ut:
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
int main()
{
randomize();
cout << " ____________________________" << endl;
cout << "( Välkommen till WargenLotto )" << endl;
cout << " ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯";
cout << endl << setw(25) << "Dagens lottorad lyder :" << endl;
label:
cout << endl << setw(14) << "-------" << endl;
int rad[7];
int i=1, x;
char ch;
while (i<=7) //slumpar fram 7 tal
{
x=(random(35)+1);
rad[i]=x;
i++;
}
while (i>=2)
{ //skriver ut talen i en kolumn
cout << setw(10) << rad[i-1] << endl;
i--;
}
cout << setw(14) << "-------";
cout << endl << "Vill du köra en gång till? (j/n) ";
cin >> ch;
if(ch == 'j' || ch == 'J')
goto label;
}
MVH
/HenkeSv: Lottorad i C++
int i=1;
while (i<=7) //slumpar fram 7 tal
{
x=(random(35)+1);
rad[i]=x;
i++;
}
Du kommer att skriva utanför ditt allokerade minne när i == 7. Ett bättre sätt vore:
for(int i=0;i<7;i++)
{
rad[i++] = random(35) + 1;
}
Om du vill kan du utelämna klamrarna också. Det här är det stora felet, om du rättar det kan du säkert få de andra rätt på egen hand.
För att inte få samma nummer två gånger kan du skriva:
int x;
for(int i=0;i<7;i++)
{
x = random(35) + 1;
for(int j=0;j<i;j++)
{
if(x == rad[j])
{
i = j = 0;
x = random(35) + 1;
}
}
rad[i++] = x;
}
Jag tror att detta ska fungera... har lite ont om tid, så jag hinner inte tänka igenom koden närmare... Jag är säker på att ngn annan kan rätta om jag gjort ngt fel.
BTW, Använd inte goto, det skapar spagettikod.