Bonjour,
Le principe du code, c'est que y et x dans la fonction random() envoie des valeurs aléatoires à la fonction print(), et print() affiche les résultats.
#include <time.h>
#include <stdio.h>
void random(int *y, int *x){
srand((int)time(NULL));
*y = rand()% (50-1) + 1;
*x = rand()% (100-1) + 1;
}
void print(int a, int b){
random(&a,&b);
printf("x:%d,y:%d\n",a,b);
}
int main(){
random();
print();
return 0;
}
gcc envoie ce résultat :
random.c: In function ‘main’:
random.c:15:5: error: too few arguments to function ‘random’
random();
^
random.c:4:6: note: declared here
void random(int *y, int *x){
^
random.c:16:5: error: too few arguments to function ‘print’
print();
^
random.c:9:6: note: declared here
void print(int a, int b){
Quelqu'un aurait une idée ? Je ne suis pas spécialement bon avec les pointeurs.
# incohérence sur print
Posté par Marc Quinton . Évalué à 5.
-d'un coté print est déclaré avec 2 arguments
- de l'autre il est appelé sans print();
- et dans main(), il faudrait déclarer 2 int.
[^] # Re: incohérence sur print
Posté par totof2000 . Évalué à 7.
Hello.
Sans être méchant, ce que tu dit n'est pas très clair …. Je vais reprendre :
Il ne s'agit pas d'un problème de pointeur mais un problème d'appel de fonction.
La fonction random est déclarée ainsi:
Puis dans ton main, ligne 15, tu l'appelles sans lui passer d'arguments:
D'ou le message :
qui signifie => en ligne 15, colonne 5 (5eme caractère de la ligne, soit le début de l'appel de fonction "random"): trop peu d'argument pour la fonction 'random' (autrement dit, tu appelles une fonction qui s'attend à avoir plus d'arguments).
Ensuite le compilateur t'indique à quelle fonction il fait référence (ce qui te permet de voir combien de paramètre elle attend, et de la corriger si besoin, ou de corriger l'appe lpour lui passer le bon nombre de paramètre)
Ensuite tu as exactement la même chose pouir la fonction print :
Est-ce clair ? C'est pas forcément simple à expliquer par écrit : à l'oral on peut s'appuyer sur les réactions de la personne en face pour savoir si elle a compris.
# langues
Posté par pralines . Évalué à 4. Dernière modification le 07 octobre 2017 à 17:38.
salut
apprendre un langage de programmation sans savoir lire un peu l'anglais informatique, tu vas souvent être obligé d'appeler à l'aide dans les forums…
tu n'as peut-être pas accès à la configuration de ton poste de travail, mais sur mon poste linux, les messages de gcc sont francisés (via la variable locale d'environnement LC_MESSAGES je crois) et cela donne ça :
Envoyé depuis mon Archlinux
# logique
Posté par _kaos_ . Évalué à 5.
Hello,
Hors les problèmes d'arguments pointés plus haut, il y a un problème de logique dans ton code.
La fonction
random()
est appelée deux fois, une fois dans lemain()
et une fois dansprint()
.Il y a donc un appel de trop.
Matricule 23415
# what's the point ?
Posté par steph1978 . Évalué à 3.
Difficile de comprendre la finalité d'un code aussi compliqué pour rien..
Mais ceci fonctionne :
# random ?
Posté par ninis666 . Évalué à 2.
C'est toujours une bonne habitude d'ajouter les flags de warning à ton compilo : (-Wall ou -Wextra si tu veux être vraiment rigoureux).
En les activant, tu aurais eu un warning disant que srand() n'est pas déclaré et qu'il faut inclure .
Et que du coup, en l'incluant, tu aurais vue que random() est déjà une fonction définie par la libc !
Bref, active toujours les flags de warning, à minima -Wall, -Wextra et -Werror étant l'idéal.
Ah aussi, reconfigure ta locale pour avoir des messages en français, si tu n'es pas à l'aise avec l'anglais …
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.