2012-01-17 12 views
13

tengo la siguiente función:¿Por qué estoy obteniendo "valor nulo no ignorado como debería ser"?

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

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

Y la llamo en main:

getdata(arr,1024); 

me sale "valor vacío no ignorado como debe ser", pero no entiendo lo que es incorrecto. ¿Por qué obtengo este error?

+3

no inicializar el PRNG una y otra vez. Una vez por ejecución del programa es suficiente. – pmg

+0

¿cuál es el error –

+0

¿Cómo se declara arr? ¿Qué error obtienes? ¿De qué valor vacío estás hablando? –

Respuesta

9

srand no devuelve nada por lo que no puede inicializar a con su valor de retorno porque, bueno, porque no devuelve un valor. ¿Quisiste llamar al rand también?

+0

no solo llamo al método – abc

+0

esto es mi principal – abc

+2

@mertmetin Entonces no llame a ['srand'] (http://www.cplusplus.com/reference/clibrary/cstdlib/srand/) pero [' rand'] (http: // www. cplusplus.com/reference/clibrary/cstdlib/rand/)! ¿lo tengo? –

24
int a = srand(time(NULL)); 

El prototipo para srand es void srand(unsigned int) (siempre que haya incluido <stdlib.h>).
Esto significa que no devuelve nada ... pero está usando el valor que devuelve (???) para asignar, por inicialización, al a.


Editar: esto es lo que hay que hacer:

#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); 
    /* ... */ 
} 
+0

cómo puedo asignar arr [i] = srand (tiempo (NULL)) – abc

+4

@mertmetin ¡No puede! Ese es todo el punto. –

+0

srand (tiempo (NULL)) arr [i] = rand()% 100 ¿cuál es la función de srand aquí? – abc

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

Debe ser

 arr[i] = rand(); 

Y poner srand(time(NULL)) algún lugar en el comienzo de su programa.

15

El cartel original cita un mensaje de error del compilador de GCC, pero incluso al leer este hilo, no está claro si el mensaje de error está dirigido correctamente, excepto por @pmg's answer. (1, por cierto)


de error: Valor de vacío no ignorado, ya que debe ser

Este es un mensaje de error GCC que significa el retorno del valor de una función es 'vacío', pero que intentas asignarlo a una variable no nula.

Ejemplo:

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

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

    return 0; 
} 

No está permitido asignar vacío a números enteros, o de cualquier otro tipo.

En la situación de la OP:

int a = srand(time(NULL)); 

... no está permitido. srand(), according to the documentation, devuelve void.

Esta pregunta es un duplicado de:

estoy respondiendo, a pesar de ser duplicados, porque este es el primer resultado en Google para este mensaje de error. Como este hilo es el resultado principal, es importante que este hilo ofrezca un resultado breve, claro y fácil de encontrar.

1

"valor de vacilación no ignorado como debería ser" este error se produce cuando la función como srand (tiempo (NULL)) no devuelve algo y lo está tratando como si estuviera devolviendo algo. Como en el caso de la función pop() en la cola, si almacena el elemento reventado en una variable, obtendrá el mismo error porque no devuelve nada.

Cuestiones relacionadas