Structure en c

Fermé
Utilisateur anonyme - 11 avril 2006 à 15:46
chahinez-soft Messages postés 2 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 24 janvier 2008 - 24 janv. 2008 à 16:06
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 lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
11 avril 2006 à 16:35
Bonjour!

Pourrais tu mettre l'erreur exacte que tu as au moment de la compilation?
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
11 avril 2006 à 19:58
Pourquoi ta struct liste est définie dans le main et pas en début de fichire ?
0
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
/*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 jeudi 24 janvier 2008 Statut Membre Dernière intervention 24 janvier 2008 3
24 janv. 2008 à 16:06
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