Почему я получаю "пустое значение, которое не игнорируется, как должно быть"?
У меня есть следующая функция:
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);
Я получаю "пустое значение не игнорируется, как должно быть", но я не понимаю, что не так. Почему я получаю эту ошибку?
Ответы
Ответ 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() в очереди, если вы сохраните всплывающий элемент в переменной, вы получите ту же ошибку, потому что она ничего не возвращает.