Problème d'affichage en programmation en C
Fermé
Hamster18
-
Modifié le 2 janv. 2019 à 09:29
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 4 janv. 2019 à 16:45
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 4 janv. 2019 à 16:45
A voir également:
- Problème d'affichage en programmation en C
- Application de programmation - Guide
- Affichage double ecran - Guide
- Problème affichage fenêtre windows 10 - Guide
- Windows 11 affichage classique - Guide
- Comment agrandir l'affichage de l'écran - Guide
2 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 2 janv. 2019 à 13:21
Modifié le 2 janv. 2019 à 13:21
Salut Hamster18,
Il y a certainement un problème de copier-coller dans l'affichage de ton code pour tp.c où toute la fin du fichier apparaît sur une seule ligne sur ce qui est posté sur le forum.
Sinon, chez moi, ton code ne compile pas en raison de l'erreur produite par
Donc, tu ne peux pas comparer 2 struct comme cela en C. Tu dois comparer individuellement les membres des deux structs.
Pour le reste je n'ai pas analysé ton code, ni pu l'exécuter, et on ne peut, de toutes façons, pas reproduire les problèmes d'affichage que tu indiques sans disposer des 3 fichiers de données utilisés par le programme.
S'il s'agit seulement d'un problème d'affichage, plutôt que de poster la totalité de ton code avec les fichiers de données utilisés, pourquoi ne crées-tu pas un court programme de quelques lignes avec des données de test limitées intégrées en dur et illustrant le problème constaté ?
Pour poster ton code sous forme lisible sur le forum de CCM, suit les indications de ce lien.
Dal
Il y a certainement un problème de copier-coller dans l'affichage de ton code pour tp.c où toute la fin du fichier apparaît sur une seule ligne sur ce qui est posté sur le forum.
Sinon, chez moi, ton code ne compile pas en raison de l'erreur produite par
if(c==l->com)dans la fonction
Liste ajouter(Liste l,Commande c). En effet, si le C permet d'affecter le contenu d'une struct à une autre de même type sans avoir à affecter chaque membre individuellement, tu n'as pas la même possibilité pour les comparaisons.
Donc, tu ne peux pas comparer 2 struct comme cela en C. Tu dois comparer individuellement les membres des deux structs.
Pour le reste je n'ai pas analysé ton code, ni pu l'exécuter, et on ne peut, de toutes façons, pas reproduire les problèmes d'affichage que tu indiques sans disposer des 3 fichiers de données utilisés par le programme.
S'il s'agit seulement d'un problème d'affichage, plutôt que de poster la totalité de ton code avec les fichiers de données utilisés, pourquoi ne crées-tu pas un court programme de quelques lignes avec des données de test limitées intégrées en dur et illustrant le problème constaté ?
Pour poster ton code sous forme lisible sur le forum de CCM, suit les indications de ce lien.
Dal
Bonjour Dal, je suis l'une des camarades de Hamster18 pour le projet et j'ai tenté quelques modifications suite à vos commentaires. Je voulais savoir ce qu'il en était de cette version ? Merci d'avance, cordialement.
Liste ajouterEnTete(Liste l,Commande c) { Maillon *m; m=(Maillon*)malloc(sizeof(Maillon)); if(m==NULL) { printf("problème malloc\n"); exit (1); } strcpy(m->com.idCommande,c.idCommande); strcpy(m->com.idArticle,c.idArticle); strcpy(m->com.idClient,c.idClient); m->com.quantNonLiv=c.quantNonLiv; m->suiv=l; return m; } Liste ajouter(Liste l,Commande c) { if(l==NULL) return ajouterEnTete(l,c); if(c.idCommande==l->com.idCommande && c.idArticle==l->com.idArticle && c.idClient==l->com.idClient && c.quantNonLiv==l->com.quantNonLiv) return l; l->suiv=ajouter(l->suiv,c); return l; }
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 4 janv. 2019 à 16:46
Modifié le 4 janv. 2019 à 16:46
Bonjour Pllwk,
La question que pose Hamster18 sur ce fil concerne un problème de récupération de champs de données à partir d'une ligne comprenant une tabulation en caractère séparateur et d'affichage correctement formaté sous forme de tableau sans "décalages".
Ton code ne concerne manifestement pas ces problèmes.
De plus, tu ne poses pas de réelle question. Si tu as une question distincte de celle concernant le présent fil, poste un nouveau message sur le forum avec un code minimal compilable et exécutable illustrant ton problème, en décrivant ton problème, c'est à dire ce que fait ton code, ce qu'il devrait faire selon toi, et pourquoi tu penses que c'est un problème et un membre du forum pourra peut-être répondre à ta question.
La question que pose Hamster18 sur ce fil concerne un problème de récupération de champs de données à partir d'une ligne comprenant une tabulation en caractère séparateur et d'affichage correctement formaté sous forme de tableau sans "décalages".
Ton code ne concerne manifestement pas ces problèmes.
De plus, tu ne poses pas de réelle question. Si tu as une question distincte de celle concernant le présent fil, poste un nouveau message sur le forum avec un code minimal compilable et exécutable illustrant ton problème, en décrivant ton problème, c'est à dire ce que fait ton code, ce qu'il devrait faire selon toi, et pourquoi tu penses que c'est un problème et un membre du forum pourra peut-être répondre à ta question.
Modifié le 2 janv. 2019 à 17:43
J'ai simplifier les différentes fonctions cependant le problème persiste en ce qui concerne l'affichage. Je me suis concentrer à "régler" le problème pour le chargement du fichier articles.txt car je pense que c'est le même problème pour le chargement du second fichier. Pourriez-vous m'aider a comprendre mon erreur s'il vous plaît ?
Merci d'avance.
Cordialement hamster18
fichier articles.txt
Voici le code du .h
Voici le code du .c
(à la ligne 39 c'est " *tArt[i]=a; " j'ai du l'enlever sinon cela engendrer des problème d'affichage ...)
voici le code du test.c
Modifié le 2 janv. 2019 à 19:19
Sur la forme aussi, ton indentation n'est pas bonne (mais peut-être est-ce dû à l'absence d'indication du langage C dans la balise...).
Sur le fond de ton code :
1.
semble incorrect car, si l'identifiant de l'article a une taille fixe, ce n'est pas le cas de la dénomination selon ce que tu as posté. Or, avec , tu lis toutes les données restantes sur la ligne compte tenu de la longueur des données présentes dans articles.txt, et il ne reste ensuite plus rien à lire sur cette ligne pour tes deux derniers champs numériques.
Les champs des données dans articles.txt sont-ils séparés par une tabulation ?
Si oui, tu pourrais :
- lire toute la ligne avec fgets
- utiliser pour séparer des chaînes composant les champs (et convertir les chaînes en nombres sur les deux derniers)
Si ce n'est pas une tabulation, mais un espace qui sépare les champs, alors tu ne peux faire, a priori, la différence entre un espace au sein de la dénomination et un espace séparateur. Ce n'est pas impossible de gérer le problème, mais c'est plus difficile (on peut analyser la chaîne en partant de la fin).
S'il te plaît, confirme la nature du caractère séparateur de champs.
2.
est maladroit, ainsi que le dans , car la différence de longueur de tes champs variables pourra dépasser la largeur standard des tabulations sur ton terminal d'affichage, ce qui produira des décalages.
Tu pourrais :
- déterminer la largeur maximale de chaque colonne
- pour cela lire d'abord toutes les données et dénombrer le nombre de caractères maximum nécessaires pour les afficher par colonne
- utiliser cette information pour justifier ton texte à gauche et tes chiffres à droite avec les spécificateurs de taille de
http://www.cplusplus.com/reference/cstdio/printf/
par exemple :
donne :
Dal
Modifié le 2 janv. 2019 à 20:09
Merci d'avance.
Cordialement.
Modifié le 3 janv. 2019 à 10:02
Les champs des données dans articles.txt sont-ils séparés par une tabulation ?
Si le professeur refuse que vous utilisiez une fonction de la bibliothèque C standard accessible par string.h (que tu utilises par ailleurs), cela me parait étrange. Mais rien ne t'empêche d'en répliquer le fonctionnement dans ton programme.
http://www.cplusplus.com/reference/cstring/strtok/
procède en faisant une modification de la chaîne scannée, saucissonnée en sous-chaînes aux caractères séparateurs.
Alternativement, tu peux récupérer la ligne entière, puis énumérer les caractères et les stocker à mesure que tu les énumères dans des variables chaînes représentant chaque champ, en passant au champ suivant lorsque tu rencontres le caractère séparateur. Pour les champs représentant des valeurs numériques, il faudra une conversion, si tu tiens à les stocker en tant que et dans ta liste.
3 janv. 2019 à 13:26
Oui les différents champs de articles.txt sont séparer par des tabulations. Pour l'alternative que vous me proposer je ne voit pas ce que je doit faire.
Cordialement.