Fonctions de type void inactives
Résolu/Fermé
Onyx67
Messages postés
132
Date d'inscription
mercredi 24 février 2010
Statut
Membre
Dernière intervention
18 août 2016
-
Modifié par KX le 29/06/2014 à 17:17
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 3 juil. 2014 à 22:42
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 3 juil. 2014 à 22:42
A voir également:
- Fonctions de type void inactives
- Faiblesse type spectre ✓ - Forum Jeux vidéo
- Clear type - Guide
- Discord a cessé de fonctionner de manière inattendue - Forum Discord
- Durée de fonctionnement processeur ✓ - Forum Windows 10
- Faiblesse type psy ✓ - Forum Jeux vidéo
3 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
29 juin 2014 à 17:10
29 juin 2014 à 17:10
Bonjour,
Lorsque tu appelles une fonction, il ne faut pas rappeler ni le type de retour, ni les paramètres, cela ne sert qu'à la déclaration de la fonction.
Par exemple, tu écris bien
Avec tes fonctions c'est pareil, il ne faut pas écrire
Lorsque tu appelles une fonction, il ne faut pas rappeler ni le type de retour, ni les paramètres, cela ne sert qu'à la déclaration de la fonction.
Par exemple, tu écris bien
printf("Hello world! ");et non
int printf(const char* "Hello world! ", ... NULL);(ce qui aurait assez peu de sens).
Avec tes fonctions c'est pareil, il ne faut pas écrire
void maximumTableau(int tableauCopie[], int *tailleTableau, int *valeurMax);mais directement
maximumTableau(tableauCopie, tailleTableau, valeurMax);, idem pour
printer();!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
29 juin 2014 à 17:15
29 juin 2014 à 17:15
Bonjour,
Plein de petites erreurs et quelques grosses erreurs.
Pour les petites (qui génère souvent des warnings) :
int main()
Le bon prototype est int main(void)
int valeurMax;
Pas de mélange déclaration / code. Il faut plutôt le mettre avec les autres déclarations.
printf("Hello world! ");
Mets un '\n' en fin de chaîne. Ou alors, n'oublie pas de mettre un fflush(stdout); juste avant le return 0; final.
Pour les grosses erreurs :
scanf("%f", &valeurMax);
valeurMax est de type int et tu utilises %f qu'on réserve aux floats...
Donc plutôt : scanf("%d", &valeurMax);
void maximumTableau(int tableauCopie[], int *tailleTableau, int *valeurMax);
Outch. Que souhaites-tu faire ? Déclarer ta fonction ?
Si oui : Pas de déclaration de fonction dans ta fonction main(). Ligne à enlever (tu l'as déjà fait en haut de ton fichier).*
Si, tu souhaites appeler la fonction, c'est pas du tout ça. Il suffit de mettre : maximumTableau(tableauCopie, &tailleTableau, &valeurMax);
Même remarque pour valeurMax.
Pareil void printer(); dans le main(), si tu souhaites appeler la fonction, il faut mettre : printer();
Pourquoi passer tailleTableau en pointeur ? Cela est inutile, tu ne souhaites pas modifier la taille du tableau. Donc, plutôt int tailleTableau.
Et enfin, des conseils :
int tableauOriginal[8]={3,3,2,4,1,89,5,8};
Pour info, pas besoin de préciser la taille ici. Le compilateur définira lui-même la bonne taille. C'est pratique :-).
int tailleTableau = 8;
Pas besoin non plus. Tu peux le faire calculer automatiquement avec : sizeof tableauOriginal / sizeof *tableauOriginal.
Cela simplifie l'évolution du code.
Corrige déjà tout ça, reposte ton code corrigé, et merci d'utiliser la balise "code" situé à droite du bouton "souligné". Sinon c'est illisible.
Plein de petites erreurs et quelques grosses erreurs.
Pour les petites (qui génère souvent des warnings) :
int main()
Le bon prototype est int main(void)
int valeurMax;
Pas de mélange déclaration / code. Il faut plutôt le mettre avec les autres déclarations.
printf("Hello world! ");
Mets un '\n' en fin de chaîne. Ou alors, n'oublie pas de mettre un fflush(stdout); juste avant le return 0; final.
Pour les grosses erreurs :
scanf("%f", &valeurMax);
valeurMax est de type int et tu utilises %f qu'on réserve aux floats...
Donc plutôt : scanf("%d", &valeurMax);
void maximumTableau(int tableauCopie[], int *tailleTableau, int *valeurMax);
Outch. Que souhaites-tu faire ? Déclarer ta fonction ?
Si oui : Pas de déclaration de fonction dans ta fonction main(). Ligne à enlever (tu l'as déjà fait en haut de ton fichier).*
Si, tu souhaites appeler la fonction, c'est pas du tout ça. Il suffit de mettre : maximumTableau(tableauCopie, &tailleTableau, &valeurMax);
Même remarque pour valeurMax.
Pareil void printer(); dans le main(), si tu souhaites appeler la fonction, il faut mettre : printer();
Pourquoi passer tailleTableau en pointeur ? Cela est inutile, tu ne souhaites pas modifier la taille du tableau. Donc, plutôt int tailleTableau.
Et enfin, des conseils :
int tableauOriginal[8]={3,3,2,4,1,89,5,8};
Pour info, pas besoin de préciser la taille ici. Le compilateur définira lui-même la bonne taille. C'est pratique :-).
int tailleTableau = 8;
Pas besoin non plus. Tu peux le faire calculer automatiquement avec : sizeof tableauOriginal / sizeof *tableauOriginal.
Cela simplifie l'évolution du code.
Corrige déjà tout ça, reposte ton code corrigé, et merci d'utiliser la balise "code" situé à droite du bouton "souligné". Sinon c'est illisible.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
29 juin 2014 à 17:17
29 juin 2014 à 17:17
J'ai rajouté la balise de code dans son message, on voit mieux l'indentation comme ça ;-)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
29 juin 2014 à 17:35
29 juin 2014 à 17:35
Je vois que tu as pris du galon :-).
Onyx67
Messages postés
132
Date d'inscription
mercredi 24 février 2010
Statut
Membre
Dernière intervention
18 août 2016
1
Modifié par Onyx67 le 30/06/2014 à 15:20
Modifié par Onyx67 le 30/06/2014 à 15:20
Merci beaucoup pour votre aide, en C je comprends facilement mais je manque de rigueur!
J'ai juste gardé la variable tailleTableau parce que c'est plus pratique pour l'envoyer aux fonctions et faire des boucles ;)
Voici mon code remanié (avec des commentaires comme ça on s'y retrouve plus facilement) :
J'ai juste gardé la variable tailleTableau parce que c'est plus pratique pour l'envoyer aux fonctions et faire des boucles ;)
Voici mon code remanié (avec des commentaires comme ça on s'y retrouve plus facilement) :
#include <stdio.h> #include <stdlib.h> void copie(int tableauOriginal[], int tableauCopie[], int *tailleTableau); void maximumTableau(int tableauCopie[], int *tailleTableau, int *valeurMax); void printer(); int main(void) { int tableauOriginal[8]={3,3,2,4,1,89,5,8}; int tableauCopie[8]; int tailleTableau = 8; // création des tableaux original et copie int i; for (i=0; i<tailleTableau; i++) { printf("%d\n", tableauOriginal[i]); // affichage des valeurs du tableau original } printf("Donnez la valeur max\n"); int valeurMax; scanf("%d", &valeurMax); // saisie de la valeur max autorisée copie(tableauOriginal, tableauCopie, &tailleTableau); // copie d'original dans copie maximumTableau(tableauCopie, &tailleTableau, &valeurMax); // appel de la fonction max tableau for(i=0; i< tailleTableau; i++)// affichage des valeurs du tableau { printf("%d\n", tableauCopie[i]); } printer(); // affichage d'un message inutile return 0; } void copie(int tableauOriginal[], int tableauCopie[], int *tailleTableau) { int i; for(i=0; i< *tailleTableau; i++) { tableauCopie[i] = tableauOriginal[i]; //copie des tableaux } } void maximumTableau(int tableauCopie[], int *tailleTableau, int *valeurMax) { int i; for(i=0; i<*tailleTableau; i++) { if(tableauCopie[i]> *valeurMax) { tableauCopie[i] = 0; // comparaison des valeurs } } } void printer() { printf("Hello world! \n"); }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
30 juin 2014 à 22:10
30 juin 2014 à 22:10
J'ai juste gardé la variable tailleTableau parce que c'est plus pratique pour l'envoyer aux fonctions et faire des boucles ;)
Je n'ai pas dit le contraire...
Je dis jusqu'à la place de faire : int tailleTableau=8, tu n'as qu'à faire : int tailleTableau=sizeof tableauOriginal / sizeof *tableauOriginal;
Cela ne changera rien au code, sauf que tu n'auras pas besoin de modifier cette variable à chaque fois que tu modifies ton tableau...
int tableauOriginal[8]={3,3,2,4,1,89,5,8};
Même remarque. Tu n'as pas besoin de préciser le 8 entre crochet. Ainsi, dès que tu rajoutes un élément à ton tableau, le compilateur calculera lui-même la bonne taille.
Et pour les autres remarques, tu n'en as pas tenu compte, dommage...
Je n'ai pas dit le contraire...
Je dis jusqu'à la place de faire : int tailleTableau=8, tu n'as qu'à faire : int tailleTableau=sizeof tableauOriginal / sizeof *tableauOriginal;
Cela ne changera rien au code, sauf que tu n'auras pas besoin de modifier cette variable à chaque fois que tu modifies ton tableau...
int tableauOriginal[8]={3,3,2,4,1,89,5,8};
Même remarque. Tu n'as pas besoin de préciser le 8 entre crochet. Ainsi, dès que tu rajoutes un élément à ton tableau, le compilateur calculera lui-même la bonne taille.
Et pour les autres remarques, tu n'en as pas tenu compte, dommage...
Onyx67
Messages postés
132
Date d'inscription
mercredi 24 février 2010
Statut
Membre
Dernière intervention
18 août 2016
1
Modifié par Onyx67 le 3/07/2014 à 16:15
Modifié par Onyx67 le 3/07/2014 à 16:15
Je vais remettre int valeurMax en début de code alors!
J'ai supprimé l'indication de la taille du tableau entre crochets vu que le compilateur le fait tout seul aussi! D'ailleurs une petite question : est-ce qu'on peut toujours faire ça et ne pas s'en soucier ?
J'ai aussi utilisé la fonction sizeof que je ne connaissais pas, merci!
J'ai supprimé l'indication de la taille du tableau entre crochets vu que le compilateur le fait tout seul aussi! D'ailleurs une petite question : est-ce qu'on peut toujours faire ça et ne pas s'en soucier ?
J'ai aussi utilisé la fonction sizeof que je ne connaissais pas, merci!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
3 juil. 2014 à 22:42
3 juil. 2014 à 22:42
est-ce qu'on peut toujours faire ça et ne pas s'en soucier ?
Oui, à condition de faire une déclaration avec initialisation. Par exemple : int tab[]={...};
Oui, à condition de faire une déclaration avec initialisation. Par exemple : int tab[]={...};