2012-01-17 12 views
13

Mam następującą funkcję:Dlaczego otrzymuję "pustą wartość nie ignorowaną tak, jak powinna być"?

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

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

i wzywam go w main:

getdata(arr,1024); 

otrzymuję "void wartość nie ignorowane, jak to powinno być", ale nie rozumiem, co jest źle. Dlaczego pojawia się ten błąd?

+3

nie inicjalizuj PRNG w kółko. Raz na program wystarczy. – pmg

+0

jaki jest błąd –

+0

Jak jest zadeklarowany arr? Jaki błąd dostałeś? O jakiej próżnej wartości mówisz? –

Odpowiedz

9

srand nie zwraca niczego, więc nie można zainicjować wartości a z powodu zwracanej wartości, ponieważ, dobrze, ponieważ nie zwraca wartości. Czy chcesz też zadzwonić pod numer rand?

+0

nie tylko wywołuję metodę – abc

+0

jest moim głównym – abc

+2

@mertmetin Więc nie dzwoń ['srand'] (http://www.cplusplus.com/reference/clibrary/cstdlib/srand/), ale [' rand'] (http: // www. cplusplus.com/reference/clibrary/cstdlib/rand/)! Rozumiem? –

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

Prototyp dla srand jest void srand(unsigned int) (pod warunkiem, że zawarte <stdlib.h>).
Oznacza to, że nic nie zwraca ... ale używasz wartości, którą zwraca (???), aby przy inicjalizacji przypisać a.


Edit: to, co trzeba zrobić:

#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

jak mogę przypisać arr [i] = srand (time (NULL)) – abc

+4

@mertmetin Nie możesz! O to chodzi. –

+0

srand (time (NULL)) arr [i] = rand()% 100 jaka jest tutaj funkcja srand? – abc

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

Powinny być

 arr[i] = rand(); 

I umieścić srand(time(NULL)) gdzieś na samym początku programu.

15

Oryginalny plakat cytuje komunikat o błędzie kompilatora GCC, ale nawet po przeczytaniu tego wątku nie jest jasne, czy komunikat o błędzie został poprawnie zaadresowany - z wyjątkiem przypadku @pmg's answer. (+1, btw)


błąd: void wartość nie ignorowane, jak to powinno być

Jest to komunikat o błędzie oznacza, że ​​GCC powrotu wartość funkcji jest „nieważny”, ale próbujesz przypisać ją do zmiennej wolnej od próżni.

Przykład:

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

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

    return 0; 
} 

Nie wolno przypisywać pustkę do liczb całkowitych, lub jakiegokolwiek innego typu.

W sytuacji OP:

int a = srand(time(NULL)); 

... jest niedozwolone. srand(), according to the documentation, zwraca nieważne.

To pytanie jest duplikatem:

mam odpowiadać, mimo to jest duplikatów, ponieważ jest to top wynik w Google dla tego komunikatu o błędzie. Ponieważ ten wątek jest najwyższym wynikiem, ważne jest, aby ten wątek zawierał zwięzły, jasny i łatwy do znalezienia wynik.

1

„void wartość nie ignorowane, jak powinno być” ten błąd pojawia się, gdy funkcja jak srand (time (NULL)) nie zwraca coś i jesteś traktując go jak to jest powrót coś. Podobnie jak w przypadku funkcji pop() w kolejce, jeśli zapiszesz element w zmiennej, otrzymasz ten sam błąd, ponieważ nic nie zwróci.

Powiązane problemy