Naskrobałem taki program, możliwe że chaotyczny, ale piszę to na szybko mając mało czasu dziennie, więc najpierw to ma działać a potem wyglądać. Muszę się zabezpieczyć przed powtarzaniem się wartości w polu int. Wymyśliłem że już wylosowane wartości zapisuję do tab2 a potem drugą i kolejne wylosowane porównuję z zawartością tab2 i jeśli się powtórzyła, dodaję do ostatniej wylosowanej 1. Program wywala błąd w nagłówku if-a w funkcji sprawdzaj_liczbe.
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <cstdlib>
#include <time.h>
int N, i, licznik = 0; //licznik to długość tablicy tab2
int *tab;
int tab2; //w tab2 zapisywane są wylosowane wartość int i ze Struktura
char X;
int wylosowana;
struct Struktura {
int i;
char c;
float f;
} ;
using namespace std;
void odczyt_pliku(){
fstream plik;
plik.open("labin01.txt", ios::in);
if(plik.good()==false){
cout<<"Nie udalo sie odczytac pliku lub plik nie istnieje";
exit(0);
}
plik >> N >> X;
plik.close();
//cout<<N<<" "<<X;
}
//sprawdzaj_znak()
void sprawdzaj_liczbe(int liczba, int pozycja){
int j;
for (j=0; j<=licznik; j++){
if(liczba == tab2[j]) { // warunek jeśli liczba się powtórzyła
licznik++; //w tab2 zapisane są już wylosowane wcześniej liczby
tab2[licznik]=liczba;
liczba+1;
}
else{ //warunek jeśli liczba się nie powtórzyła
tab[pozycja]->i = wylosowana;
}
}
int losuj(int n){
struct Struktura**tab=(struct Struktura**)malloc(n*sizeof(struct Struktura*));
for (i = 0; i<=N; i++){
tab[i]=(struct Struktura*)malloc(sizeof(struct Struktura));
srand(time(NULL));
wylosowana = rand()%10000-1000;
if(i==0) {
tab[i]->i = wylosowana;
tab2[licznik]=wylosowana;
licznik++; //licznik to długość tablicy tab2
else {
sprawdzaj(wylosowana, i);
}
tab[i]->c=(char)rand()%22+66;
tab[i]->f=1000+i;
}
//cout<<tab[0]->i;
}
int main()
{
odczyt_pliku();
losuj(N);
return 0;
}