So I've been getting an error while trying to pass a struct array to a function and assigning it random values
typedef struct {
int id;
time_t t; //Variable t is of the type time - this allows us to store date&time
}
train;
int setTrainDetails();
int main() {
train array[10]; // initializing first array
setTrainDetails(array[10].id);
}
int setTrainDetails(train array[10]) {
srand((unsigned) time(NULL));
int count = 0;
while (count < 10) {
array[count].id = rand() % 100 100; // set train number from 100-200
count ;
}
}
CodePudding user response:
Your function prototype for setTrainDetails()
should include the type of the input parameter:
int setTrainDetails(train array[]);
Then when you call setTrainDetails()
in main()
, you should pass a pointer to the entire array. C arrays decay into pointers when passed to a function, so you can just pass array
:
train array[10]; // Declaring first array
setTrainDetails(array);
Passing array[10].id
is undefined behavior, because array
is only 10 train
s long, and C arrays start at index 0, so array[0]
-array[9]
are valid but array[10]
is no good.
train array[10];
declares an array of type train
that is 10 train
s long, but once the array is declared, array[10]
means index-10-of-the-array, which is out of bounds.
Inside the while
loop of setTrainDetails()
you have this line:
array[count].id = rand() % 100 100; // set train number from 100-200
which actually sets train number to a pseudo-random number between 100-199, since rand() % 100
can only return integers 0-99. for random numbers between 100-200 inclusive, you would want rand() % 101 100
Outside of that your code is fine
CodePudding user response:
typedef struct {
int id;
time_t t; //Variable t is of the type time - this allows us to store date&time
}
train;
int setTrainDetails();
int main() {
train array[10]enter code here; // initializing first array
setTrainDetails(array);
}
int setTrainDetails(train array[10]) {
srand((unsigned) time(NULL));
int count = 0;
while (count < 10) {
array[count].id = rand() % 100 100; //
count ;
}`
}