slt ,mon compilateur en Cdev n'execute que la commande de lecture scanf() , et puis il se bloque.j'arrive pas a comprendre la cause!! merci de votre aide
-----
slt ,mon compilateur en Cdev n'execute que la commande de lecture scanf() , et puis il se bloque.j'arrive pas a comprendre la cause!! merci de votre aide
Bonjour,
Je suppose que tu veux parler de DevC++ (mais peu importe).
1) Ce n'est pas ton Cdev qui bloque, mais TON programme.
2) Ma boule de cristal étant en panne, et étant trop fatigué pour utiliser mes facultés de lecture de pensées, j'ai beaucoup de peine à savoir ce que fait ton code (en clair : et le code, où est-il ?).
ma boule de cristal à moi que j'ai fonctionne encore un peu. Elle me dit qu'il manque l'opérateur d'adresse & devant l'identificateur de la variable.
En clair, il ne faut pas écrire:
mais:Code:int i: scanf("%d", i);
A+Code:int i: scanf("%d",& i);
Code:typedef struct element { int val; struct element *suiv; struct element *prec; }element; struct element *pl; void ajouter(int x) {element *e1, *e2; e1=nouv(x); if(!pl) pl=e1; else { e1=pl; while(e2->suiv) e2=e2->suiv; e1->prec=e2; e2->suiv=e1; } } int main(int argc, char *argv[]) { element *el; int x; pl=NULL; printf("ajouter un element x= "); scanf("%d",&x); ajouter(x); el=pl; while(el) { printf("%d\n",el->val); el=el->suiv; } system("PAUSE"); return 0; }
Dernière modification par JPL ; 29/12/2010 à 15h56. Motif: Ajout de la balise Code pour la lisibilité
c mon programme sachant que la fonction nouv(x) est a 100% correcte!
pour la boule de cristal; j'ai cru que c'etait a cause d'une incompatibilité entre le devC++ et windows 7 (64 bits)!!
on ne vois pas ce que fait la fonction nouv().
De plus, c'est très pénible de lire un code non indenté. Il est donc recommandé d'encadrer le code par les balises code.
A+
il s'agit d'ajouter un element dans une liste doublement chainée , la fonction nouv(x) nous rend un element don element->valeur=x.
merci de votre aide!!Code:element *nouv(int x) { element *e; e=(element*) malloc(sizeof(element)); e->val=x; e->suiv=NULL; e->prec=NULL; return e; }
je voulais m'assurer que tu avais bien fait le malloc.
Tu as essayé d'exécuter en pas-à-pas pour voir sur quelle instruction ton programme plante?
A+
je viens de tester ton programme avec visual studio. On ne peut évidemment entrer qu'une valeur, mais en tout cas pas de plantage et la valeur est bien dans la liste.
A+
PS: si je peux me permettre une petite remarque, si tu peux éviter les variables globales, fais-le. Par exemple, tu devrais mettre la variable pl dans la fonction main et la passer en paramètre à la fonction ajouter.
Ça rend les fonctions plus indépendantes du programme et évite ainsi les effets de bord.
Bonjour,
On peut pratiquement toujours s'en passer.je viens de tester ton programme avec visual studio. On ne peut évidemment entrer qu'une valeur, mais en tout cas pas de plantage et la valeur est bien dans la liste.
A+
PS: si je peux me permettre une petite remarque, si tu peux éviter les variables globales, fais-le. Par exemple, tu devrais mettre la variable pl dans la fonction main et la passer en paramètre à la fonction ajouter.
Ça rend les fonctions plus indépendantes du programme et évite ainsi les effets de bord.
Et le conseil est bon, c'est même une des clés d'une programmation "propre".
oui , c b1 ,ça a fonctionné !!!
merci a tous de votre collaboration
Qu'est ce qui ne fonctionnait pas finalement?
A+
je ne sais pas exactement de quoi ill s'agit, mais j'ai commis qq fautes au programme initial dans la syntaxe de scanf et celle de printf. en fait je suis tout a fait debutant avec le language C et ses fonctionnnalites. merci jack de votre aide!