|
c++ comparison between signed and unsigned integer expressions
boobs - 28-06-2010 18:34
Mam taki programik:
#include <iostream> #include <cstring> #include <stdlib.h> #include <cstdio> #include <ctime> #include <cmath> using namespace std;
//Lotto
const unsigned ILOSC_LICZB = 6 ; const int MAKSYMALNA_LICZBA = 49;
int main() {
//deklaracja i wyzerowanie tablicy liczb unsigned aLiczby[ILOSC_LICZB]; for (int i = 0; i < ILOSC_LICZB; ++i) aLiczby[i] = 0;
//losowanie liczb
srand (static_cast<int>(time(NULL))); for (int i = 0; i < ILOSC_LICZB;) { //wylosowaniee liczby aLiczby[i] = rand() % MAKSYMALNA_LICZBA + 1; // sprawdzenie czy sie ona nie powtarza bool bPowtarzaSie = false; for (int j = 0; j< i; ++j) { if (aLiczby[j] == aLiczby[i]) { bPowtarzaSie = true; break; } } //jeżeli sie nie powtarza przechodzimy do nastepnej liczby if (!bPowtarzaSie) ++i; }
// wyświetlanie wylosowanych liczb
cout << "wyniki losowania : " << endl; for (int i=0; i < ILOSC_LICZB;i++) cout << aLiczby[i] << " "; // koniec
return 0; } Niby program się kompiluje lecz dostaje przy pętlach ,,for'' takie coś: lotto.cpp:21: warning: comparison between signed and unsigned integer expressions
AdeBe - 28-06-2010 22:00
No przecież to widać jak na dłoni: ILOSC_LICZB zadeklarowałeś jako unsigned int, ale jako licznika w pętlach używasz już zwykłego int.
Przy okazji jeszcze kilka uwag: 1. Odradzam stosowanie zmiennych globalnych. Do niczego nie są ci w tym programie potrzebne, a nauczysz się złych nawyków. 2. Bardzo dobrze, że stałe zadeklarowałeś jako const (a nie przez #define), jednak z reguły nazwy pisane wielkimi literami rezerwuje się właśnie dla dyrektyw preprocesora.
boobs - 06-07-2010 16:00
Witam. Mój problem polega na tym iż programik losuje mi tylko raz losową liczbę, a powinien za każdym razem inną. #include <iostream> #include <cstring> #include <stdlib.h> #include <cstdio> #include <ctime> #include <cmath> using namespace std;
int oewe() { cout << "Wrum1 " << endl; return 0; }
int liczb() { unsigned losowa; srand (static_cast<int>(time(NULL))); losowa = rand() % 100 + 2; cout << losowa << endl; return 0; }
int i = 0;
int main() { for (int xxx;xxx < 5;++xxx) { oewe(); liczb();
}
return 0; }
db - 06-07-2010 16:05
srand (static_cast<int>(time(NULL)))
Ustawiasz parę razy `seed' na tą samą wartość. Zobacz co zwraca time().
srand ((int) time(NULL)); int n1 = rand() % 46 + 1; int n2 = rand() % 46 + 1; int n3 = rand() % 46 + 1; printf("%d %d %d\n", n1,n2,n3);
srand ((int) time(NULL)); n1 = rand() % 46 + 1; srand ((int) time(NULL)); n2 = rand() % 46 + 1; srand ((int) time(NULL)); n3 = rand() % 46 + 1; printf("%d %d %d\n", n1, n2, n3);
26 38 7 26 26 26
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|