Problème liste chainée - C - Programmation
Marsh Posté le 05-04-2005 à 10:56:30
scanf("%s", &c->nom);
....
fgets(c->nom, sizeof c->nom, stdin);
et d'ailleurs, c'est quoi 'chaine' ?
Marsh Posté le 05-04-2005 à 11:01:15
Chaine c'est :
Code :
|
Et date :
Code :
|
Marsh Posté le 05-04-2005 à 12:10:56
J'ai déjà eu le même problème :
Code :
|
Essaie en enlevant les "&" pour les "%s". Cela ne va que pour les variables numériques, pas les chaînes de caractères.
"c->nom" est déjà une adresse...
Marsh Posté le 05-04-2005 à 12:15:39
calogerogigante a écrit : Essaie en enlevant les "&" pour les "%s". Cela ne va que pour les variables numériques, pas les chaînes de caractères. |
Ton "explication" va beaucoup l'aider...
C'est surtout qu'un scanf (cf. man) demande l'adresse de la variable dans laquelle stocker la valeur.
Marsh Posté le 05-04-2005 à 12:19:15
Tu chicanes là...
C'est ce que j'ai voulu dire...
Juste avant ton post, j'ai rajouté
Code :
|
Si c'est pas clair pour celui qui a posé la question, il suffit de redemander...
Et je détaillerai... Mais je ne vois pas en quoi j'étais pas clair..
Marsh Posté le 05-04-2005 à 12:20:16
calogerogigante a écrit : J'ai déjà eu le même problème :
|
Ca ne change rien
Mon erreur ne concernerait pas plutôt l'utilisation des pointeurs ?
Marsh Posté le 05-04-2005 à 12:20:52
typiquement: un char peut ne pas être considéré comme une variable numérique, et pourtant on est obligé de passer son adresse
Marsh Posté le 05-04-2005 à 12:24:42
Y'a pas un problème dans ta structure des if ??
Code :
|
Si c'est NULL, on va dans le 1er if,
si c'est pas NULL, tu testes (tete_cand != NULL)
mais à cet endroit, tete_cand est déjà différent de NULL.
Sinon, à part ça, je vois rien qui pourrait déconner... Je regarde encore...
J'essaie juste de t'aider... hein ? J'espère que je suis un peu plus clair...
;-)
Marsh Posté le 05-04-2005 à 12:26:29
Enfin.. Là c'est vrai que je suis peut-être pas clair...
;-)
Marsh Posté le 05-04-2005 à 12:28:41
Cela ne fait-il pas double emploi ?
Code :
|
Ou je dis encore des bêtises ?
Et je ne vois pas où, dans ton programme, le pointeur
"cCourant"
lors de sa création, à quel endroit est-il rattaché à la liste chaînée ?
Du coup, il se plante pour les "cCourant->Suiv" !!
Marsh Posté le 05-04-2005 à 13:12:03
N'alloue rien pour cCourant
égale-le plutot à tete_cand car comme calogerogigante, je dis que ta variable à beau être initialisée, elle n'en est pas pour le moins non rattachée à ta liste chainée...
Marsh Posté le 05-04-2005 à 13:25:22
Moktar1er a écrit : typiquement: un char peut ne pas être considéré comme une variable numérique, et pourtant on est obligé de passer son adresse |
Ben si. Un char est une variable numérique entière. Seul problème, on ne sait pas si il est signé ou non signé. Si c'est important, on ajoute signed ou unsigned.
Marsh Posté le 05-04-2005 à 13:52:54
Sinan a écrit : Je n'arrive pas à comprendre pourquoi j'ai une erreur sous dev-c++ avec mon programme utilisant des listes simplement chainées.
|
Pas besoin de globale. Si tu dois faire 2 listes, tu vas écrire le code 2 fois ?
|
Et pour les saisies, je te conseille ceci:
http://mapage.noos.fr/emdel/notes.htm#saisie
Marsh Posté le 05-04-2005 à 13:53:51
le pb vient du 2ème malloc qui ne devrait pas y être et dont le cCourant->suiv vaut n'importe quoi (non initialisé)...
il faut à la place de :
Code :
|
juste faire :
Code :
|
Sinon regroupe ton c->suiv=NULL dans l'initialisation de ta struct candidature...
++
EDIT : ouuupppss grillé
Marsh Posté le 05-04-2005 à 14:06:52
Emmanuel Delahaye a écrit : Ben si. Un char est une variable numérique entière. Seul problème, on ne sait pas si il est signé ou non signé. Si c'est important, on ajoute signed ou unsigned. |
merde tu me casses mon coup là
nan je voulais qu'il détaille un peu plus ce qu'il voyait comme différence entre une "variable numérique" et une variable de type chaîne de caractères
Marsh Posté le 05-04-2005 à 14:22:09
dreameddea th -> pas compris ta 2eme remarque
J'ai fait les modifs et j'ai toujours la même erreur. Jme demande si ça vient pas de dev c++ parce que là je bloque
Code :
|
Marsh Posté le 05-04-2005 à 14:27:21
Sinan a écrit : J'ai fait les modifs et j'ai toujours la même erreur. Jme demande si ça vient pas de dev c++ parce que là je bloque |
Aucun problème avec le code que j'ai posté (Testé avec Dev-C++ 4.9.9.0)
Compare ton code:
|
avec le mien:
|
Vu la différence ? On cherche le dernier élément, pas celui qui vaut NULL...
sinon la suite ...
cCourant->suiv = c; |
...invoque un comportement indéfini car 'cCourant' vaut NULL...
D'ailleurs, à cet endroit, ton code original était bon. Pourquoi l'as-tu modifié ?
Marsh Posté le 05-04-2005 à 14:29:01
Code :
|
Marsh Posté le 05-04-2005 à 14:43:55
boulaÿ
Effectivement, avec un
while (cCourant->suiv!=NULL) {
cCourant = cCourant->suiv;
}
J'ai aucun soucis. Jcomprend pas pourquoi j'ai pas tilté avant
J'ai perdu 1/2 journée avec ste connerie
Merci à vous
Marsh Posté le 05-04-2005 à 14:45:15
Par contre emmanuel ton code marche pas avec mon dev-c++ 4.9.9.1 j'ai une erreur sur la ligne 30
candidature *c = malloc (sizeof(*c));
Marsh Posté le 05-04-2005 à 14:54:07
Sinan a écrit : Par contre emmanuel ton code marche pas avec mon dev-c++ 4.9.9.1 j'ai une erreur sur la ligne 30 |
Vérifie que tu es bien en C et non en C++. L'extension du source doit être '.c' (et non '.C' ni '.cpp').
Marsh Posté le 05-04-2005 à 15:15:37
autant pour moi, c'était enregistré en cpp
Marsh Posté le 05-04-2005 à 16:35:06
Sinan a écrit : autant pour moi, c'était enregistré en cpp |
LE FOUET !!!
Marsh Posté le 05-04-2005 à 10:54:13
Je n'arrive pas à comprendre pourquoi j'ai une erreur sous dev-c++ avec mon programme utilisant des listes simplement chainées.
Mon code :
Déclaration de mon pointeur :
Ma fonction d'ajout :
Lors de l'ajout du premier élément, tout se passe bien. Mais lorsque je veux insérer un deuxième élément, j'ai une "erreur du programme, truc.exe a généré une erreur..."
Je vois bien que c'est ma boucle while qui pose problème, mais je ne comprend pas pourquoi.
Merci bien
---------------
Cptn.Barberousse