Ben non. La conversion void* <-> T* est implicite en C depuis 1989.Envoyé par kamouminator
Si tu lis des textes antiques, ça peut être différent, comme je l'ai expliqué dans mon article...
Ben non. La conversion void* <-> T* est implicite en C depuis 1989.Envoyé par kamouminator
Si tu lis des textes antiques, ça peut être différent, comme je l'ai expliqué dans mon article...
Voici le fichier .txt si je me suis pas gourré :p Tout le monde va voir mes superbes fautes chichic au moins ca profite à tout le monde :p
Oui c'est tout à fait çà!Envoyé par Emmanuel Delahaye
Euh, t'es sûr que c'est la version compilable ?Envoyé par plagia
Ca fait beaucoup quand même... Je suppose que tu as recopié le code à la main, c'est ça ?Project : Forums
Compiler : GNU GCC Compiler (called directly)
Directory : C:\dev\forums2\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
Linking console executable: C:\dev\forums2\console.exe
Switching to target: default
Compiling: main.c
main.c:51: error: syntax error before "else"
<...>
Process terminated with status 1 (0 minutes, 8 seconds)
44 errors, 31 warnings
Installe Code::Blocks sur ton PC et développe ton code dessus. Ensuite, fait le portage sur VMS. Je veux bien admettre que sur la machine VMS il n'y ait pas de port USB, mais tu dois pouvoir faire un transfert de fichier entre ton PC et ta machine VMS par FTP, non ?
En fait, il manquait une {. Ca en fait des dégats !
J'ai déplacé les variables en local de main(), et ça m'a révélé quelque chose d'interessant :
Une des raisons pour lesquelles les globales c'est le diable, c'est qu'elles sont initialisées par défaut et que ce genre de bug potentiel échappe au contrôle.Compiling: main.c
main.c: In function `main':
main.c:44: warning: 'nombre_noeud' might be used uninitialized in this function
Ton programme utilise la ligne de commande. Il est d'usage, lorsque la ligne de commande requise est incorrecte, d'afficher le 'mode d'emploi'...
Alors je mets quoi en paramètres ?
J'ai trouvé un bug :
est faux. Il maque une place pour le 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part message.contenu = malloc (strlen (argv[POSITION_MESSAGE]));
Code : Sélectionner tout - Visualiser dans une fenêtre à part message.contenu = malloc (strlen (argv[POSITION_MESSAGE]) + 1);
En attendant, je mets ça :
fic.txt aaa bbb ccc
et ça donne :
Visiblement, il faut fournir un fichier. Il faut quoi dedans ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8Fichier donnee : fic.txt Emetteur : aaa Destinataire : bbb Message : ccc Fichier introuvable Press ENTER to continue.
Je dois m'absenter. Voici où j'en suis (P.J.)
Donc la commande de lancement c :
mc []tp2 fichier_description_reseau noeud_emetter noeud_destinataire message
Donc le fichier decrit le reseau exemple n1 --- n2 ---- n3
On crée le fichier comme ca
n1 n2
n2 n1 n3
n3 n2
De cette façon on détermine le réseau.
BUGS detectés :Envoyé par plagia
- Après la comptage des lignes, on est erreur ou en fin de fichier. Il faut un revenir au début avec rewind().
- Le fichier n'ayant pas été fermé, une ouverture provoque un comportement indéterminé. A supprimer. Le rewind() suffit.
- Après sa création, le tableau 'tableau_noeud' n'est pas initialisé. Il contient n'importe quoi. Le premier appel de strcmp() suivant est donc voué à l'échec (comportement indéfini).
- tableau_noeud[ligne_noeud].nom est un pointeur (valant NULL, maintenant). On ne peut pas l'utiliser pour faire une copie, car il ne pointe pas sur un espace valide. Le comportement est indéfini. Je recommande la fonction POSIX.1 strdup(). Libérer avec free().
Ca a l'air d'aller mieux...
Je te laisse terminer, libérer ce qu'il faut, fermer le fichier, bref ecrire tout ça correctement.Fichier donnee : 'data.txt'
Emetteur : 'aaa'
Destinataire : 'bbb'
Message : 'ccc'
Nombre de lignes lues : 3
Nom noeud : n1Noeud unique
Nom noeud : n2Noeud unique
Nom noeud : n3Noeud unique
Nombre noeud : 3
Press ENTER to continue.
A vue de nez, ton algorithme est un peu compliqué, je pense qu'on doit pouvoir faire plus simple.
Encore merci pour toutes ces infos néanmoins j rencontre un pb sur l initialisation de tableau noeud j procède de cette manière :
tableau_noeud[compteur_init]=NULL;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 tableau_noeud=malloc(nombre_lignes_lues*sizeof(struct noeud)); for (compteur_init=0; compteur_init <= nombre_lignes_lues;compteur_init++) { tableau_noeud[compteur_init]=NULL; }
........................^
%CC-E-NOCONVERT, In this statement, "((void ...)0)" is of type "pointer to void", and cannot be converted to "struct noeud".
at line number 116 in file MANSON$DKA100:[USERS.PLAGIACAPRA.TP2C]TP2BIS.C;4
Je pense que j dois faire une erreur de débutant :p
Ben oui. Tu essayes de donner la valeur NULL à une structure. Ca n'a aucun sens.Envoyé par plagia
Ce que je fais dans ces cas là, je définis une structure locale statique initialisée à 0 et constante (lecture seule) qui sert à initialiser chaque structure par simple copie :
Et attention, c'est < et non <=, sinon, tu vas trop loin. Je rappelle que les indices valides d'un tableau de N vont de 0 à N-1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for (compteur_init = 0; compteur_init < nombre_lignes_lues; compteur_init++) { static const struct noeud z = {0}; tableau_noeud[compteur_init] = z; }
En fait j ai l impression que mon code ne reflète pas ce que je veux faire.
Dans mon idée je voulais faire un tableau de pointeur qui contienne les pointeurs de tous mes noeuds et que ces pointeurs pointent vers la structure du nom correspondant. Et j'ai l'impression que je déclare mal et je remplis mal.
Je voulais savoir en plus quand j alloue une structure noeud est ce possible d'incérer un pointeur dans cette structure qui ait l'adresse de cette même structure ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 struct noeud { char nom; struct noeud *noeud_liaison[NOMBRE_LIAISON_MAX]; }noeud struct noeud *tableau_noeud;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager