Tablica nie ma wartości zdefiniowanej podczas tworzenia. Podczas tworzenia tablicy jej wielkość jest losowa. (8 linia)
srand nie powinno być w pętli bo się krzaczy ;-) (33 linia)
x nie powinno być granicą losowania, przecież jeśli nie ma 4 osób np 1,2,3,4 to dalej może być osoba z nr 30 co nie? (28 linia)
W warunku kończącym pętle nie masz żadnej zmiennej odpowiadającej za przechodzenie po tablicy "numerek" intiger nie może być porównany do wskaźnika (wszystko wywala kompilator)(31 linia)
Zdefiniuj ją po wczytaniu ilości nieobecnych. A poza tym aby program działał poprawnie polecam wczytanie wszystkich numerów, wylosowanie liczby od 1 do 30 i późniejsze sprawdzanie czy wylosowany numer przypadkiem nie jest w tablicy nieobecnych,
#include <iostream>
#include <ctime>
#include <cstdlib>
int load()
{
int bufor;
while(true)
{
std::cin>>bufor;
if(!std::cin.fail())
break;
std::cin.clear();
std::cin.ignore(1000,'\n');
std::cout<<"Wartosc nie jest liczba\n";
}
return bufor;
}
int main ()
{
srand(time(NULL));
int maxPupil, absPupil,* T=nullptr, siz=0;
std::cout<<"Podaj ile uczniow jest w klasie (liczac nieobecnych) ";
maxPupil=load();
std::cout<<"Podaj numery nieobecnych uczniow (jak skonczysz wprowadz 0) ";
while( true )
{
absPupil=load();
if( absPupil == 0 )
break;
if(!(absPupil>0&&absPupil<=maxPupil))
{
std::cout<<"Zly numer\n";
continue;
}
int * nw = new int[ siz + 1 ];
for( int i = 0; i < siz; ++i )
nw[ i ] = T[ i ];
nw[ siz ] = absPupil;
delete[] T;
T = nw;
siz++;
}
int ran;
bool flage=true;
while(flage)
{
flage=false;
ran=std::rand()%maxPupil+1;
for(int i=0;i<siz;i++)
if(T[i]==ran)
{
flage=true;
break;
}
}
std::cout<<"Szczesliwy numerek to... "<<ran;
}