BeardedWonder_30
BeardedWonder_30

Reputation: 21

how to get my random function to work?

The random function is not working in the parameters set and I do not know why. Can anyone help? I need random numbers between 18 and 38 and I can't seem to get that and I do not know why.

Here's my code

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct tires
{
    char Manufacturer[40];
    int tire_pressure[2];
    int pressure_change;
}typedef tires;

void getTireInformation(tires*, int);
void tirePressure(tires*, int);
int main()
{
    tires tire[4];
    tires* ptire = &tire[0];

    getTireInformation(ptire, 4);
    tirePressure(ptire, 4);

    return 0;
}

void getTireInformation(tires* ptire, int size)
{
    int i = 0;
    for (i = 0; i < size; i++)
    {
        printf("please enter Make for the tire: \n");
        scanf("%s", &(ptire + i) ->Manufacturer);
    }

    printf("all tire make you entered ...just for verification:\n");
    for(i = 0; i < size; i++)
        printf("%s\n",(ptire +i) ->Manufacturer);
}

void tirePressure(tires* ptire, int size)
{
    int i = 0;
    int min = 18;
    int max = 38;
    for (i = 0; i < size; i++)
    {
        srand(time(NULL));
        ptire = rand()%(max - min)-min;
        printf("%d\n", (ptire + i) -> tire_pressure);
    }
}

Edit: Here's my updated function after making the suggested fixes

void tirePressure(tires* ptire, int size)
{
    int i = 0;
    int min = 18;
    int max = 38;
    for (i = 0; i < size; i++)
    {
        ptire = rand()%(max - min + 1) + min;
        printf("%d\n", (ptire + i) -> tire_pressure);
    }
}

Upvotes: 1

Views: 39

Answers (1)

nalzok
nalzok

Reputation: 16107

It's not necessary to call srand(time(NULL)); every time it generates a random number. Put that in main(), before any function call.

Then change

rand() % (max - min) - min;

to

rand() % (max - min + 1) + min;

Say max = 3 and min = 1, you need rand() % 3 + 1 to generate a random number from 1 to 3 inclusively.

There is another problem, which have nothing to do with random number generating: The random numbers generated is assigned to ptire, that is, you are assigning a tires* with an int!


I've refined your code. Hope it will work:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct tires
{
    char Manufacturer[40];
    int tire_pressure[2];
    int pressure_change;
} typedef tires;

// Prototypes
void getTireInformation(tires*, size_t);
void tirePressure(tires*, size_t);

int main()
{
    tires tire[4];
    tires* ptire = &tire[0];

    srand(time(NULL));
    getTireInformation(ptire, 4);
    tirePressure(ptire, 4);

    return 0;
}

void getTireInformation(tires* ptire, size_t size)
{
    size_t i = 0;
    for (i = 0; i < size; i++)
    {
        printf("Please enter the maker of the tire: \n");
        scanf("%s", (ptire + i) -> Manufacturer); // just use str. &str actually causes undefined bahavior
    }

    printf("All tire make you entered ...just for verification:\n");
    for(i = 0; i < size; i++)
        printf("%s\n", (ptire +i) -> Manufacturer);
}

void tirePressure(tires* ptire, size_t size)
{
    int i = 0;
    int min = 18;
    int max = 38;
    for (i = 0; i < size; i++)
    {
        (ptire + i) ->tire_pressure[0] = rand() % (max - min + 1) + min;
        printf("%d\n", (ptire + i) -> tire_pressure[0]);
    }
}

And here is the result when I run it:

Please enter the maker of the tire: 
qwert
Please enter the maker of the tire: 
fewqwe
Please enter the maker of the tire: 
hcgexf
Please enter the maker of the tire: 
zrbghcr
All tire make you entered ...just for verification:
qwert
fewqwe
hcgexf
zrbghcr
22
34
31
31

All numbers are between 18 to 38 now. Note that tire_pressure is an array containing two ints. Without knowing your purpose, I just gave random numbers to its first element.

Upvotes: 1

Related Questions