Structure en c

Utilisateur anonyme -  
chahinez-soft Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
bonjour
voila g un exo en c qui conserne les liste contigue
et c'est une structure de deux champ un tableau et une longueur
bon mon probleme c ke o moment de la compilation il ya une erreur o niveau de la procedure "suprrime"

#include <stdio.h>
#include <stdlib.h>


void supprime(liste ls,int k) /*LE PROBLEME EST ICI*/
{
int i,n;
n=ls.longueur;
for(i=k;i<=n-1;i++){
ls.t[i]=l.t[i+1];}
ls.longeur=n-1;
}

main()
{
struct liste{
int t[100];
int longueur;};
struct liste l1;int i;
printf("entrer l longueur de la liste");
scanf("%d",&l1.longueur);
for(i=0;i<l1.longueur;i++){
printf("entrer la valeur%d",i);
scanf("%d",&l1.t[i]);
}
supprime(liste,3);
for(i=0;i<l1.longueur;i++){

printf("la valeur%d= %d\n ",i,l1.t[i]);
}
system("pause");
}

5 réponses

maily Messages postés 7556 Date d'inscription   Statut Contributeur Dernière intervention   453
 
Bonjour!

Pourrais tu mettre l'erreur exacte que tu as au moment de la compilation?
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Pourquoi ta struct liste est définie dans le main et pas en début de fichire ?
0
dragon bleu
 
le probleme qui se pose dans ton programme c'est que tu as declare la structure dans le main et que la fonction qui va l'utiliser se trouve avant. c'est une erreur de logique; dependement du compilateur ca refuse uniquement de se compiler et compile et se plante.
A+
0
youness
 
/*bonjour , je m’appelle Youness , c’est ma répance à votre problème */

#include <stdio.h>
#include <stdlib.h>
void supprime (liste *ls,int k) /*la déclaration de la fonction avant main() */
main()
{
struct liste
{
int t[100]; /* il est possible de définit liste avant main() */
int longueur;
};
struct liste l1;int i;
printf("entrer la longueur de la liste");
scanf("%d",&l1.longueur);
for(i=0;i<l1.longueur;i++)
{
printf("entrer la valeur%d",i);
scanf("%d",&l1.t[i]);
}
supprime(&l1,3); /*il ne va se passe rien si on ne passe pas l’adresse de l1 comme argument
Car ça va nous permet de changer le contenu de l1 */
for(i=0;i<l1.longueur;i++)
{
printf("la valeur%d= %d\n ",i,l1.t[i]);
}
system("pause");
Return 0 ;
}
void supprime(liste *ls,int k) /* la définition de fonction est après le main() */
{
int i,n;
n=ls.longueur;
for(i=k;i<n-1;i++)
{
ls.t[i]=ls.t[i+1];
}
ls.longeur=n-1;
}


Exemple : si on a : l1.longueur=10 est on charger le tableau l1.t [10] par les valeurs suivantes :

i = 0 1 2 3 4 5 6 7 8 9
l1.T[i] = 5 8 7 4 5 7 12 14 15 0

Après la chargement de notre tableau on fait un appelle à la fonction supprime (supprime l1.t[3] ) ,la langueur devient égale à 9 la résulta devient :
L1.[0]=5
L1.[1]=8
L1.[2]=7
L1.[3]=5
L1.[4]=7
L1.[5]=12
L1.[6]=14
L1.[7]=15
L1.[8]=0
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chahinez-soft Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   3
 
salut je suis daccord avec Youness tu dois déclarer liste comme un nouveau type avec typedef et ceci avant void entant que paramètre global comme tu pouras l'utiliser à n'importe quel moment et la liste doit passer par adresse si tu veux la modifier en ajoutant * devant son nom
0