Подтвердить что ты не робот

Почему я получаю "пустое значение, которое не игнорируется, как должно быть"?

У меня есть следующая функция:

void getdata(int arr[], int n)
{

    for (int i = 0; i < n; i++) 
    {
        int a = srand(time(NULL));
        arr[i] = a;
    }
}

И я называю это в main:

getdata(arr, 1024);

Я получаю "пустое значение не игнорируется, как должно быть", но я не понимаю, что не так. Почему я получаю эту ошибку?

4b9b3361

Ответ 1

  int a = srand(time(NULL));

Прототипом для srand является void srand(unsigned int) (при условии, что вы включили <stdlib.h>).
Это означает, что он ничего не возвращает... но вы используете значение, которое оно возвращает (???), чтобы назначить по инициализации a.


Изменить: это то, что вам нужно сделать:

#include <stdlib.h> /* srand(), rand() */
#include <time.h>   /* time() */

#define ARRAY_SIZE 1024

void getdata(int arr[], int n)
{
    for (int i = 0; i < n; i++)
    {
        arr[i] = rand();
    }
}

int main(void)
{
    int arr[ARRAY_SIZE];
    srand(time(0));
    getdata(arr, ARRAY_SIZE);
    /* ... */
}

Ответ 2

Оригинальный плакат цитирует сообщение об ошибке компилятора GCC, но даже прочитав этот поток, он не понял, что сообщение об ошибке правильно адресовано - кроме @pmg answer. (+1, битва)


error: значение void не игнорируется, поскольку оно должно быть

Это сообщение об ошибке GCC, которое означает, что возвращаемое значение функции является "void", но вы пытаетесь присвоить ему непустую переменную.

Пример:

void myFunction()
{
   //...stuff...
}

int main()
{
   int myInt = myFunction(); //Compile error!

    return 0;
}

Вам не разрешено назначать void целым числам или любому другому типу.

В ситуации OP:

int a = srand(time(NULL));

... не разрешено. srand(), в соответствии с документацией, возвращает void.

Этот вопрос является дубликатом:

Я отвечаю, несмотря на то, что это дубликаты, потому что это лучший результат в Google для этого сообщения об ошибке. Поскольку этот поток является верхним результатом, важно, чтобы этот поток дал краткий, понятный и легко обнаруживаемый результат.

Ответ 3

srand ничего не возвращает, поэтому вы не можете инициализировать a своим возвращаемым значением, потому что, так как оно не возвращает значение. Вы хотели называть rand?

Ответ 4

    int a = srand(time(NULL))
        arr[i] = a;

Должно быть

        arr[i] = rand();

И положите srand(time(NULL)) где-то в самом начале вашей программы.

Ответ 5

"значение void не игнорируется, поскольку оно должно быть"  эта ошибка возникает, когда функция вроде srand (time (NULL)) ничего не возвращает, и вы относитесь к ней так, как она что-то возвращает. Как и в случае функции pop() в очереди, если вы сохраните всплывающий элемент в переменной, вы получите ту же ошибку, потому что она ничего не возвращает.