выделить случайные числа с плавающей точкой в ​​массиве в пределах диапазона, указанного пользователем - PullRequest
0 голосов
/ 28 января 2019

Я не знаю, в чем проблема

int main()
{

    int antalVarde = 0;
    low=0, high=0;
    float* arr;
    srand((int)time(NULL));

    printf("Hur många värden ska skapas: ");
    scanf_s("%d", &antalVarde);
    printf("Ange min-värde: ");
    scanf_s("%d", &low);
    printf("Ange max-värde: ");
    scanf_s("%d", &high);


    arr = (float*)malloc(antalVarde * sizeof(float));

    for (int i = 0; i <= antalVarde; i++)
    {
        *arr = RandomReal(low, high);
    }
    printf("%f", *arr);

    getchar();
    return 0;
}


float RandomReal(float low, float high)
{


    float d;

    d = (float) rand() / ((float) RAND_MAX + 1);
    return (low + d * (high - low));
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вот фиксированная программа:

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

float RandomReal(float low, float high);
int main()
{

    int antalVarde = 0;
    float low = 0, high = 0;
    float* arr;
    char c;
    srand((int)time(NULL));

    printf("Hur många värden ska skapas: ");
    scanf_s("%d", &antalVarde);
    printf("Ange min-värde: ");
    scanf_s("%f", &low);
    printf("Ange max-värde: ");
    scanf_s("%f", &high);


    arr = (float*)malloc(antalVarde * sizeof(float));

    for (int i = 0; i < antalVarde; i++)
    {
        arr[i] = RandomReal(low, high);
        printf("\nresult[%d] = %f", i,arr[i]);
    }

    printf("\nHit enter to exit");
    c = getchar();
    return 0;
}


float RandomReal(float low, float high)
{
    float d;

    d = (float)rand() / ((float)RAND_MAX + 1);
    return (low + d * (high - low));
}
0 голосов
/ 28 января 2019

Ваш цикл управления

i <= antalVarde;

нарушит границы выделения памяти и должен быть

i < antalVarde;

Однако каждое случайное значение записывается в first адрес выделения памяти с

*arr = RandomReal(low, high);

и все остальные местоположения все еще содержат неопределенные значения.Таким образом, цикл должен быть

for (int i = 0; i < antalVarde; i++)
{
    arr[i] = RandomReal(low, high);
}

Наконец, причина предупреждения компилятора в том, что нет прототипа функции, поэтому компилятор предположил, что это будет int тип.Так что добавьте

float RandomReal(float low, float high);

выше main().

...