Pourquoi suis-je “nulle valeur et non les ignorer comme elle devrait l'être”?
J'ai la fonction suivante:
void getdata(int arr[], int n)
{
for (int i = 0; i < n; i++) {
int a = srand(time(NULL))
arr[i] = a;
}
}
Et je l'appelle dans main
:
getdata(arr,1024);
- Je obtenir "nulle valeur et non les ignorer comme elle devrait l'être", mais je ne comprends pas ce qui est mal. Pourquoi j'ai cette erreur?
ne pas initialiser le GÉNÉRATEUR de plus et plus de nouveau. Une fois par de l'exécution du programme est assez.
quelle est l'erreur
Comment est arr déclaré? Quelle est l'erreur que vous obtenez? Ce que nulle valeur parlez-vous?
Faites-vous quelque chose comme
Il vous manque un point-virgule. Veuillez vous préférez copier/coller votre code au lieu de le taper à nouveau.
quelle est l'erreur
Comment est arr déclaré? Quelle est l'erreur que vous obtenez? Ce que nulle valeur parlez-vous?
Faites-vous quelque chose comme
x = getdata(arr,1024)
?Il vous manque un point-virgule. Veuillez vous préférez copier/coller votre code au lieu de le taper à nouveau.
OriginalL'auteur abc | 2012-01-17
Vous devez vous connecter pour publier un commentaire.
Le prototype pour
srand
estvoid srand(unsigned int)
(à condition que vous avez inclus<stdlib.h>
).Cela signifie qu'il ne retourne rien ... mais vous êtes à l'aide de la valeur qu'elle renvoie (???) pour attribuer, par l'initialisation, à
a
.Edit: c'est ce que vous devez faire:
Vous ne pouvez pas! C'est l'ensemble de point.
srand(time(NULL)) arr[i] = rand() % 100 quelle est la fonction srand ici?
retourne un entier aléatoire dans [0,RAND_MAX].
srand
juste initialise le générateur de nombre aléatoire. Ce générateur est tout autre chose qu'au hasard (c'est en fait un pseudo-radom nombre genrator). Avecsrand
si vous initialisez une partie de la semence de la valeur. Pour la même valeur de départ à la suite d'appels àrand
donnera la même séquence de nombres. Afin de l'appelantsrand
fois au démarrage (ou avant d'appelergetdata
avec plus ou moins de valeur aléatoire (dans ce cas en fonction de l'heure) lesrand
appels différente à chaque fois que votre programme fonctionne.Mais l'appel de
srand
à chaque fois avant derand
est une mauvaise idée, car pour la même valeur passée àsrand
,rand
reviendra de la même valeur. Bien que vous apportez à l'heure actuelle ici, c'est toujours une mauvaise idée. Lire les liens dans mon commentaire de l'autre, de répondre à gagner plus de perspicacité dans cette affaire.OriginalL'auteur
L'affiche originale est une citation d'un compilateur GCC message d'erreur, mais même en lisant ce fil, il n'est pas clair que le message d'erreur est correctement réglé - sauf par @pmg réponse. (+1, btw)
erreur: valeur nulle et non les ignorer comme elle devrait l'être
C'est un GCC message d'erreur qui signifie le retour de la valeur d'une fonction est "vide", mais que vous essayez d'attribuer à un non-nulle variable.
Exemple:
Vous n'êtes pas autorisé à céder le vide d'entiers, ou de tout autre type.
Dans le cas des OP situation:
...n'est pas autorisé.
srand()
, selon la documentation, renvoie vide.Cette question est un doublon de:
Je suis de répondre, malgré que ce soit des doublons, parce que c'est le premier résultat sur Google pour ce message d'erreur. Parce que ce fil est le top conséquent, il est important que ce fil donne une succincte, claire et facilement trouvable résultat.
OriginalL'auteur
srand
ne retourne rien, donc vous ne pouvez pas initialisera
avec sa valeur de retour, parce que, eh bien, parce qu'il ne retourne pas une valeur. Vouliez-vous dire de l'appelerrand
?c'est ma principale
Alors n'appelez pas
srand
, maisrand
! got it?OriginalL'auteur
Devrait être
Et mettre
srand(time(NULL))
quelque part au tout début de votre programme.OriginalL'auteur
"nulle valeur et non les ignorer comme elle devrait l'être"
cette erreur se produit lorsque la fonction comme srand(time(NULL)) ne renvoie pas à quelque chose et vous traiter comme il est de retourner quelque chose. Comme dans le cas de la pop() fonction dans la file d'attente ,si vous allez stocker le sauté élément dans une variable, vous obtiendrez la même erreur car elle ne retourne rien.
OriginalL'auteur