S'assure que les informations de débogage vont dans stderr

This commit is contained in:
Mattéo Delabre 2016-11-19 14:58:55 +01:00
parent bd0c0afd89
commit aa63afb9d8
2 changed files with 24 additions and 26 deletions

View File

@ -6,15 +6,14 @@
typedef struct HufTree HufTree; typedef struct HufTree HufTree;
/** /**
* Écrire sur la sortie standard à la manière de printf, * Écrire des données de débogage sur la sortie d'erreurs standard
* seulement si le mode verbeux est actif * (seulement si le mode verbeux est actif)
*/ */
void printVerbose(const char* format, ...); void printVerbose(const char* format, ...);
/** /**
* Active ou désactive l'affichage des messages verbeux * Active ou désactive l'affichage des messages de débogage (mode verbeux)
* (mode verbeux). Si activé, `printVerbose` écrit sur * sur la sortie d'erreurs standard
* la sortie standard. Sinon, `printVerbose` n'a pas d'effet
*/ */
void setVerbose(int); void setVerbose(int);
@ -24,8 +23,7 @@ void setVerbose(int);
int isVerbose(); int isVerbose();
/** /**
* Afficher sur la sortie standard l'arbre passé * Afficher sur la sortie standard l'arbre passé en paramètre
* en paramètre
*/ */
void printTree(HufTree tree); void printTree(HufTree tree);

View File

@ -32,7 +32,7 @@ void printVerbose(const char* format, ...) {
va_list args_list; va_list args_list;
va_start(args_list, format); va_start(args_list, format);
vprintf(format, args_list); vfprintf(stderr, format, args_list);
va_end(args_list); va_end(args_list);
} }
} }
@ -57,12 +57,12 @@ void _printVertex(HufVertex vert, wchar_t* buffer, int length) {
if (vert.child_l != NULL && vert.child_r != NULL) { if (vert.child_l != NULL && vert.child_r != NULL) {
// Affichage d'un sommet avec enfants, on montre // Affichage d'un sommet avec enfants, on montre
// la probabilité somme des enfants // la probabilité somme des enfants
printf("\n"); printVerbose("\n");
// Affichage du fils gauche. Augmentation du préfixe // Affichage du fils gauche. Augmentation du préfixe
// pour l'affichage des enfants du fils gauche // pour l'affichage des enfants du fils gauche
buffer[length] = '\0'; buffer[length] = '\0';
printf("%ls├── ", buffer); printVerbose("%ls├── ", buffer);
buffer[length] = L''; buffer[length] = L'';
buffer[length + 1] = ' '; buffer[length + 1] = ' ';
@ -74,14 +74,14 @@ void _printVertex(HufVertex vert, wchar_t* buffer, int length) {
// Affichage du fils droite. Augmentation du préfixe // Affichage du fils droite. Augmentation du préfixe
// pour l'affichage des enfants du fils droit // pour l'affichage des enfants du fils droit
buffer[length] = '\0'; buffer[length] = '\0';
printf("%ls└── ", buffer); printVerbose("%ls└── ", buffer);
buffer[length] = ' '; buffer[length] = ' ';
_printVertex(*vert.child_r, buffer, length + 4); _printVertex(*vert.child_r, buffer, length + 4);
} else { } else {
// Affichage d'une feuille de l'arbre, correspondant // Affichage d'une feuille de l'arbre, correspondant
// à un caractère du corpus // à un caractère du corpus
printf("%c\n", _safeChar(vert.name)); printVerbose("%c\n", _safeChar(vert.name));
} }
} }
@ -97,44 +97,44 @@ int _maxDepth(HufVertex vert) {
} }
void printFrequenciesTable(double* table, size_t size) { void printFrequenciesTable(double* table, size_t size) {
printf("┌─┬────┬─────────┐\n"); printVerbose("┌─┬────┬─────────┐\n");
printf("│C│code│fréquence│\n"); printVerbose("│C│code│fréquence│\n");
printf("├─┼────┼─────────┤\n"); printVerbose("├─┼────┼─────────┤\n");
double sum = 0; double sum = 0;
for (size_t i = 0; i < size; i++) { for (size_t i = 0; i < size; i++) {
if (table[i] != 0) { if (table[i] != 0) {
printf("│%c│%4d│%9.4lf│\n", _safeChar(i), (int) i, table[i]); printVerbose("│%c│%4d│%9.4lf│\n", _safeChar(i), (int) i, table[i]);
sum += table[i]; sum += table[i];
} }
} }
printf("├─┴────┼─────────┤\n"); printVerbose("├─┴────┼─────────┤\n");
printf("│ Total│%9.4lf│\n", sum); printVerbose("│ Total│%9.4lf│\n", sum);
printf("└──────┴─────────┘\n"); printVerbose("└──────┴─────────┘\n");
} }
void printLabelsTable(char** table, size_t size) { void printLabelsTable(char** table, size_t size) {
printf("┌─┬────┬────────────────┐\n"); printVerbose("┌─┬────┬────────────────┐\n");
printf("│C│code│ étiquette│\n"); printVerbose("│C│code│ étiquette│\n");
printf("├─┼────┼────────────────┤\n"); printVerbose("├─┼────┼────────────────┤\n");
double total_length = 0; double total_length = 0;
size_t label_count = 0; size_t label_count = 0;
for (size_t i = 0; i < size; i++) { for (size_t i = 0; i < size; i++) {
if (table[i] != 0) { if (table[i] != 0) {
printf("│%c│%4d│%16s│\n", _safeChar(i), (int) i, table[i]); printVerbose("│%c│%4d│%16s│\n", _safeChar(i), (int) i, table[i]);
total_length += strlen(table[i]); total_length += strlen(table[i]);
label_count++; label_count++;
} }
} }
printf("├─┴────┴───┬────────────┤\n"); printVerbose("├─┴────┴───┬────────────┤\n");
printf("│Long. moy.│%12.4lf│\n", total_length / label_count); printVerbose("│Long. moy.│%12.4lf│\n", total_length / label_count);
printf("└──────────┴────────────┘\n"); printVerbose("└──────────┴────────────┘\n");
} }
char _safeChar(char input) { char _safeChar(char input) {