我有以下功能:
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);
我得到“虚假价值不被忽视,因为它应该是”但我不明白什么是错的。为什么我会收到这个错误?
答案 0 :(得分:28)
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);
/* ... */
}
答案 1 :(得分:17)
原始海报引用了GCC编译器错误消息,但即使通过阅读此主题,也不清楚错误消息是否已正确解决 - 除@pmg's answer之外。 (+ 1,顺便说一句)
这是一个GCC错误消息,表示函数的返回值为'void',但您尝试将其分配给非void变量。
示例:
void myFunction()
{
//...stuff...
}
int main()
{
int myInt = myFunction(); //Compile error!
return 0;
}
不允许将void分配给整数或任何其他类型。
在OP的情况下:
int a = srand(time(NULL));
...是不允许的。 srand()
,according to the documentation,返回无效。
此问题与以下内容重复:
我正在回复,尽管它是重复的,因为这是Google在此错误消息中的最佳结果。因为这个线程是最重要的结果,所以这个线程提供简洁,清晰且易于查找的结果非常重要。
答案 2 :(得分:10)
srand
不会返回任何内容,因此您无法使用其返回值初始化a
,因为它不会返回值。你的意思是打电话给rand
吗?
答案 3 :(得分:5)
int a = srand(time(NULL))
arr[i] = a;
应该是
arr[i] = rand();
将srand(time(NULL))
放在程序的最开头。
答案 4 :(得分:1)
“空虚值不应该被忽略,因为它应该是” 当像srand(time(NULL))这样的函数没有返回某些内容并且你正在处理它时它会返回一些东西时会发生这个错误。与队列中pop()函数的情况一样,如果将弹出元素存储在变量中,则会得到相同的错误,因为它不会返回任何内容。