Traçage d'affichage en mode console sur C++.

Résolu
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 - Modifié le 24 juil. 2022 à 06:36
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 - 24 juil. 2022 à 21:43

Salut à tous,

J'ai une petite question au sujet de la fonction "printf" et "fprintf".

Mon but est de faire un "front-end" (un lien extérieur en DOS) dans mon programme VB.

J'ai donc besoin de lancer un programme DOS en C++ et de tracer son exécution sous DOS.

Je fais un fichier "batch" :

Monprograme.exe -h > text.log

Mais, seuls les "printf" sont envoyés dans le fichier text... et les "fprintf" ignorés.

En mode console, le texte est pourtant bien affiché.

Mon but, bien entendu, n'est pas de recompiler les programmes C++, mais de récupèrer l’intégralité de la prose de ces programmes esclaves, afin d'afficher le bon déroulement de ceux-ci.

Auriez-vous une idée sympa à me soumettre ?

Une astuce de commande DOS, comme COPY CON ???>text.log... pour tracer l'envoi à l'écran.

D'avance merci.

5 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 11
Modifié le 24 juil. 2022 à 09:35

Bonjour,

prinf() écrit dans stdout, fprintf() écrit dans divers flux en particulier stdout ou stderr.
Pour récupérer les 2 flux, il faut l'indiquer à la fin par 2>&1 (mettre le flux stderr dans stdout):

MonProgramme.exe > text.log 2>&1
1
pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024 11
Modifié le 24 juil. 2022 à 09:39

Bonjour JeuDuTaquin, bonjour Dalfab, bonjour tous,
Les écritures effectuées avec fprintf() sont prévues dans un fichier
sauf si c'est programmé selon : fprintf(stdout, ...)
Voir : https://cplusplus.com/reference/cstdio/fprintf/
Pour les voir il faudrait ajouter dans le fichier 1_help.bat
une ou plusieurs lignes supplémentaires du genre :
afficheur.exe monfichier.txt
où le programme afficheur.exe lit les lignes de monfichier.txt
et les recopie sur la console avec des utilisations de printf().
Un petit exemple de code source pour programmer afficheur.exe :
-----------------------------------------------------------------

#include <stdio.h>
int main(int argc, char **argv)
{
   FILE * pFile;
   char ligne [10000];
   if(argc == 1)
   {
      printf("fichier absent \n");
      return 1;
   }
   pFile = fopen (argv[1],"rb");
   if(pFile == NULL)
   {
      printf("fichier %s non lu \n", argv[1]);
      return 1;
   }
   while(!feof(pFile))
   {
      fgets(ligne, 9999, pFile);
      printf("%s", ligne);
   }
   fclose (pFile);
   return 0;
}


-----------------------------------------------------------------
On peut aussi utiliser afficheur.exe pour regrouper les lignes
écrites avec fprintf() après celles de printf() en faisant :

MonProgramme.exe > text.log
afficheur.exe monfichier.txt >> text.log


D'autres variantes sont possibles.
Cordialement, pgl10


1
Whismeril Messages postés 19065 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 22 juin 2024 657
24 juil. 2022 à 09:42

Bonjour à tous les 3.

Dlafab et plg10 comme vous l'avez constaté l'interface de saisie a changé. Les balises de codes ont disparues pour être remplacées par une boite de dialogue d'insertion d'extrait de code.

Voici comment s'en servir efficacement https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Je me suis permis de corriger vos messages.

Bonne journée


0
pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024 11
24 juil. 2022 à 10:35

Bonjour Whismeril,

Merci pour ces corrections avec les boites de dialogue d'insertion d'extrait de code.

Mais, j'ai déjà utilisé ce nouveau dispositif dans un message où le résultat

obtenu était en erreur manifeste sans pouvoir corriger cet affichage.

C'est pourquoi maintenant je me méfie de cette utilisation qui fonctionne mal parfois.

Salutations, pgl10

0
Whismeril Messages postés 19065 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 22 juin 2024 657 > pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024
24 juil. 2022 à 10:51

Il y a eu quelques bugs au lancement, à ma connaissance il ne reste que C# et VBscript qui ne fonctionnent pas correctement.

0
pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024 11 > Whismeril Messages postés 19065 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 22 juin 2024
24 juil. 2022 à 11:13

Dans mon cas, c'était avec html :

https://codes-sources.commentcamarche.net/forum/message-2169048-javascript

0
Whismeril Messages postés 19065 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 22 juin 2024 657 > pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024
24 juil. 2022 à 11:59

Ton lien ne mène nulle part

0
pgl10 Messages postés 382 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 1 mai 2024 11 > Whismeril Messages postés 19065 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 22 juin 2024
24 juil. 2022 à 15:06

Whismeril,
             
Mon lien menait jusqu'à un message privé CCM-CS où
j'avais écrit un tout petit fichier en html ayant seulement 9 lignes.
Mais en fait, je m'aperçois maintenant que le problème rencontré
ne concerne pas la boite de dialogue en code html parce que
dans le texte du message ici présent si j'écris : srx="tiny.js"
j'affiche correctement correctement ceci : srx="tiny.js"
par contre, si j'écris : src="" où il y a bien : tiny.js
à l'intérieur de : "" alors j'affiche seulement : src="""
Comprenne qui pourra !
C'est difficile à expliquer !
A suivre, pgl10

0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
24 juil. 2022 à 21:17

Un grand merci à tous.

Il faut donc considèrer l'ensemble des flux d'affichage, d'où la commande DOS :

"c:/monprogramme.exe 1>texte.log" pour "c:/monprogramme.exe>texte.log".

Ici nous affichons le flux principal et "2>&1" les flux secondaires.

Voilà, tout fonctionne.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
24 juil. 2022 à 21:43

Salut,

Il est donc possible de sélectionner les flux de sortie:

"c:/monprogramme.exe 1>texte1.log" ::Flux principal

"c:/monprogramme.exe 2>texte2.log" ::Flux secondaire

ou  "c:/monprogramme.exe 1>texte1.log 2>texte2.log"

"c:/monprogramme.exe>texte.log 2>&1" pour tout afficher sur le même fichier.

Encore merci.

0
Rejoignez-nous