2016-03-19 3 views
1

Случайная функция не работает в параметрах, и я не знаю почему. Может ли кто-нибудь помочь? Мне нужны случайные числа от 18 до 38 лет, и я не могу этого понять, и я не знаю, почему.Как заставить мою случайную функцию работать?

Вот мой код

#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: Вот мой обновленный функция после внесения предложенных Фиксирует

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); 
    } 
} 
+0

'srand' следует вызывать один раз и только один раз. Поместите эту строку в начало 'main'. Кроме того, вы хотите '+ min' не' -min'. И вы назначаете результат 'ptire', когда вы должны назначить' ptire [i] .tire_pressure' и ....... – user3386109

+0

Также '(max - min)' должно быть '(max - min + 1) '. Таким образом, вы должны иметь «rand()% (max - min + 1) + min;' Это даст вам полный диапазон 'min' ...' max' включительно. И, как уже упоминалось, вы должны только называть 'srand' один раз, возможно, из' main'. –

+0

Я сделал эти вещи, и это все еще не между 18 и 38. – Charlie

ответ

1

Это не нужно вызывать srand(time(NULL)); каждый раз, когда он генерирует случайное число , Поместите это в main(), перед вызовом любой функции.

Затем измените

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

в

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

Say max = 3 и min = 1, вам нужно rand() % 3 + 1 сгенерировать случайное число от 1 до 3 включительно.

Существует еще одна проблема, которая не имеет ничего общего с генерации случайных чисел: случайных чисел присваивается ptire, то есть вы присваиваете tires* с int!


Я уточнил ваш код. Надеюсь, что это будет работать:

#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]); 
    } 
} 

И вот результат, когда я запускаю его:

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 

Все номера от 18 до 38 в настоящее время. Обратите внимание, что tire_pressure представляет собой массив, содержащий дваint s. Не зная вашей цели, я просто дал случайные числа своему первому элементу.

+0

. Я вижу разницу .. Большое вам спасибо за вашу помощь !!!! – Charlie

+0

@Charlie Мое удовольствие :) Если вы думаете, что мой ответ вам поможет, вы можете щелкнуть по серому тику ниже оценки слева, чтобы принять его. –

+0

ОК прохладно. Это первый раз, когда этот сайт – Charlie