Les fonctions et les structures
driftman123
Messages postés
36
Statut
Membre
-
driftman123 Messages postés 36 Statut Membre -
driftman123 Messages postés 36 Statut Membre -
Bonsoir, bon voilà j'ai un projet de classe à réaliser qui fait appele à des fonction qui font :
- l'ajout d'un nouveau produit dans une structure nom_prod, qté.
- la recherche d'un produit.
- modification d'un produit.
et j'ai du mal à travailler avec les fonction :
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int fonction_ajout()
{
int i, n;
struct etud { char nom[30], prenom[30], date[10]; };
struct etud e[10];
printf("nbr:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("name_per:"); scanf("%s",&e.nom[i]);
printf("sec_name:"); scanf("%s",&e.prenom[i]);
printf("date:"); scanf("%s",&e.date[i]);
}
}
int main()
{
int choice;
printf ("donnez choix:");
scanf("%d",&choice);
switch (choice): {
case 1:
fonction_ajout();
break;
}
return 0;
}
- l'ajout d'un nouveau produit dans une structure nom_prod, qté.
- la recherche d'un produit.
- modification d'un produit.
et j'ai du mal à travailler avec les fonction :
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int fonction_ajout()
{
int i, n;
struct etud { char nom[30], prenom[30], date[10]; };
struct etud e[10];
printf("nbr:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("name_per:"); scanf("%s",&e.nom[i]);
printf("sec_name:"); scanf("%s",&e.prenom[i]);
printf("date:"); scanf("%s",&e.date[i]);
}
}
int main()
{
int choice;
printf ("donnez choix:");
scanf("%d",&choice);
switch (choice): {
case 1:
fonction_ajout();
break;
}
return 0;
}
1 réponse
-
Salut driftman123,
1.
Ne mets pas de & dans scanf pour les tableaux, ils sont déjà traités comme des pointeurs vers le premier élément du tableau, ou vers l'élément indiqué par l'indice.
Si ta fonction a pour prototyleint fonction_ajout()
elle doit renvoyer un int. Si elle ne renvoie rien, c'estvoid
que tu dois indiquer en type de retour. S'agissant des paramètres, tu devrais les spécifier explicitement (cf. la suite sur ce sujet).
Ce sont des étudiants ou des produits que tu traites.. tu es sûr que c'est ton code ?
Si tu n'utilises pas les paramètres de main, c'estint main(void)
que tu devrais écrire.
Ta structure conditionnelle switch a une erreur de syntaxe, enlève les deux points àswitch (choice):
.
2.
Sur ta fonction.
En définissantstruct etud
etstruct etud e[10];
dans ta fonction, tu perdras automatiquement l'allocation de cet espace mémoire et la variable en quittant ta fonction.
Et du coup, lorsque tu voudras faire tes fonctions de modification ou de recherche, tu n'auras plus rien.
struct etud
devrait être définit en dehors de toute fonction, après tes include (ou dans un fichier .h).
Pourstruct etud e[10];
tu as plusieurs choix, par exemple :
- définirstruct etud e[10];
en dehors de toute fonction (mais c'est alors une variable globale, ce que certains considèrent comme devant être évité, si possible)
- définirstruct etud e[10];
dans main, et passer ton tableau en paramètre de la fonction, avec sa taille,
- définir un pointeur surstruct etud
, allouer dynamiquement la mémoire nécessaire en fonction des besoins (avec malloc), passer le pointeur en paramètre de la fonction avec sa taille, puis libérer la mémoire lorsque tu n'en as plus besoin (avec free)
Dal-
-
Est ce que c'est mieux comme ca ?
#include<conio.h>
#include<stdio.h>
int main(void)
{
int choice;
struct etud {
char nom[30], qte[30], date[10];
};
printf("Pour inserer un produit-----------------: 1\n");
printf("Pour supprimer un produit---------------: 2\n");
printf("Pour modifier les données d'un produit--: 3\n");
printf("Pour afficher un produit----------------: 4\n");
scanf("%d",&choice);
if (choice==1)
{
function_1();
getch();
}
void function_1(struct etud)
{
int i,n;
struct etud e[10];
printf("donnez n:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("nom_prod:"); scanf("%s",&e[i].nom);
printf("qte:"); scanf("%s",&e[i].qte);
printf("date:"); scanf("%s",&e[i].date);
}
};
-