C++ Newbie help

#1| 0

Prøver lige og lege lidt med noget C++.


Er 100 % newbie. Sidder bare og donker lidt rundt. Jeg ved godt at programmet som sådan ikke giver nogen mening. Det er bare for at afprøve noget jeg laver det, men det virker ikke rigtigt sådan som jeg vil have det til.


Jeg vil gerne sammenligne to random terninge kast.


Når jeg kører programmet kører det fint nok, men det stopper efter at det viser de 2 terninge kast og viser således ikke teksten med hvem der vandt terninge kastet.


Når jeg laver build kommer der en error: no match for operator<.


Har prøvet at google det lidt og fundet fremtil nogle forskelige links. men er ikke blvet meget klogere


#include <iostream>
#include <string>
#include <random>
#include <ctime>



using namespace std;
int main()
{
cout << "Combat simlulator" << endl;

// Declare variables humans, and skeletons
int humans;
int skeletons;


// User Input human variable
cout << "How many Humans are in your army?\n";
cin >> humans;


// User input skeletons variable
cout << "\nHow many Skeletons are in the enemy army?\n";
cin >> skeletons;


// Roll a dice to find humans attack, and skeletons defense value's
mt19937 randomGenerator(time(0));
uniform_int_distribution humansDice(1, 6);
cout << "Humans rolled a attack dice of \n" << humansDice(randomGenerator) << endl;


uniform_int_distribution skeletonsDice(1, 6);
cout << "Skeletons rolled a defense dice of \n" << skeletonsDice(randomGenerator) << endl;



// Compare humans and skeletons variables to figure out who won the battle. Virker ikke: no match for operator<
if (humansDice < skeletonsDice) {
cout << "You have been defeated by the skeleton army !\n";
} else if (skeletonsDice < humansDice ) {
cout << "You have defeated the skeleton army !\n";
}


Redigeret af klondike d. 22-02-2015 01:10
21-02-2015 14:45 #2| 0

Nu er det længe siden jeg har rodet med C++, men du bør nok gemme resultatet af dine terningslag i en variabel, før du udskriver. Så vil du også kunne sammenligne.



21-02-2015 14:59 #3| 0

@kneth


Har lige edit min post. Af en eller anden grund har den ikke fået det hele med copy & paste. Den sletter <int> foran henholdsvis humansDice og skeletonsDice når jeg bruger cope & paste.


Er dog muligt at du stadig har ret og der er noget jeg ikke forstår.


Men gemmer følgende linie ikke resultatet i integer variablen humansDice ?


uniform_int_distribution<int> humansDice(1, 6);


21-02-2015 15:01 #4| 0

Kender ikke C++, men kan det være fordi du ikke har deklareret humansDice og skeletonsDice som ints og derfor ikke kan sammelignes med <?

21-02-2015 15:54 #5| 0

Netop. uniform_int_distribution har ikke comparison operators. Men lur mig om ikke de kan castes til int, og dermed kunne sammenlignes.

21-02-2015 16:21 #6| 0

Brug rand() fra #include <cstdlib>. Du får at terningslag ved at skrive

int slag = 1 + rand() % 6;

Så skal du bare sammenligne to integers hvilket '<' godt kan klare.



22-02-2015 01:47 #7| 0

Hey guys tak for hjælpen.


Fik det til at virke med semperph1's forslag.


Og tror jeg med hjælp fra jer andre blev lidt klogere på hvad den error msg betyder ( At den sammenlignings funktion ikke findes i

uniform_int_distribution) Måske lidt dårligt formuleret, men tror jeg forstår det lidt bedre nu.


Så mange tak for hjælpen :-)


Lige et tillægs spørgsmål,


Hvad er forskellem mellem alle de forskelige random generators der findes. Er der noget med at de ikke er true random i mere eller mindre grad ?

22-02-2015 02:18 #8| 0

Der er ingen RNG (Random Number Generators) der er 100% random. Derfor bliver de også kaldt PRNG (Pseudo-Random Number Generator). Men generelt er det ikke noget man behøver at bekymre sig om i dagligdagen, med mindre man koder hardcore kryptografi.


Ellers er det kun små forskelle, som f.eks. om det er muligt at generere samme sekvens ud fra samme "seed" (det kan være nyttigt når man tester).

← Gå til forumoversigtenGå til toppen ↑
Skriv et svar