2016-03-19 26 views
1

Rastgele işlevi ayarlanmış parametrelerde çalışmıyor ve nedenini bilmiyorum. Biri yardım edebilir mi? 18 ile 38 arasında rastgele sayılara ihtiyacım var ve bunu anlayamıyorum ve nedenini bilmiyorum.Rasgele işlevimi nasıl çalıştıracağım?

İşte benim kod

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

Düzenleme: Burada önerilen düzeltmeleri

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' bir kez çağrılmalı ve yalnızca bir kez. Bu çizgiyi "ana" nin başına koyun. Ayrıca, + min '' -min' istemiyorum. Ve ptire [i] .tire_pressure 've ....... – user3386109

+0

'a atamanız gerektiğinde sonucu' ptire 'olarak atayacaksınız. Ayrıca' (max - min) 'olmalıdır (max - min + 1) '. Öyleyse rand()% (max - min + 1) + min; “Bu size min. Ve bahsettiğimiz gibi, sadece “srand” ı, muhtemelen “main” dan bir kez çağırmalısınız. –

+0

Ben bu şeyleri yaptım ve hala 18 ila 38 arasında değil – Charlie

cevap

1

Bu bir rastgele sayı üretir her zaman srand(time(NULL)); çağırmak gerekli değil yaptıktan sonra benim güncellenen işlevi var . Herhangi bir işlev çağrısından önce bunu main()'a koyun.

sonra değiştirmek

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

için
rand() % (max - min + 1) + min; 

ki max = 3 ve = 1 min, sen 1'den inclusively 3 rasgele bir sayı üretmek için rand() % 3 + 1 gerekir.

rastgele sayı üretme araçları ile ilgisi olmayan başka bir sorun vardır: ptire atanan oluşturulan rasgele sayılar, yani bir int ile tires* atıyorsunuz olduğunu!


Kodunuzu geliştirdim. işe yarayacak Umut: Burada

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

Ve

sonucudur bunu çalıştırdığınızda:

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 

Tüm sayılar 18 şimdi 38 arasındadır. Not: tire_pressure, ikiint s dizisini içeren bir dizidir. Amacınızı bilmeden, sadece ilk elementine rasgele sayılar verdim.

+0

farkını görüyorum .. Yardımınız için çok teşekkür ederim !! – Charlie

+0

@Charlie My pleasure :) Cevabın size yardımcı olduğunu düşünüyorsanız, kabul etmek için soldaki skorun altındaki gri tıklamayı tıklayabilirsiniz. –

+0

tamam havalı. Bu siteyi ilk kez kullanıyor – Charlie

İlgili konular