Printf n'affiche rien

Fermé
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - Modifié le 15 févr. 2021 à 17:28
wytekrow Messages postés 8 Date d'inscription lundi 30 novembre 2020 Statut Membre Dernière intervention 9 juillet 2021 - 15 févr. 2021 à 20:07
Bonjour, quand je compile le code suivant, est-ce normal que mon printf de la ligne 11 n'affiche rien ?

C'est embêtant car des fois j'aimerais vérifier mon code fonctionne, et sans affichage ça va être compliqué.

// File : binarytree.c
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "movietable.h"
#include "tree.h"


int main(int argc, char *argv[])
{
  printf("bonjour");
  MovieTitle query;
  MovieTable * movieTable;
  Tree tree;

  if (argc < 2){
    printf("Usage : ./moviesuggestion moviefile\n");
    exit(EXIT_FAILURE);
  }

  //movieTable = MovieTable_AllocEmpty();

  //MovieTable_ReadMoviesFromFile(movieTable, argv[1]);

  //MovieTable_Print(*movieTable, stdout);

  printf("==================\n" );

  Tree_InitEmpty(&tree);
  Tree_CreateFromMovieTable(&tree, *movieTable);
  printf ("Tree size : %d\n", Tree_GetSize(tree));

//  Tree_Print(tree, stdout);
  while(1){
    printf("Entry your query: ");
    fgets(query, MOVIE_TITLE_MAX_SIZE,stdin);
    printf("%s", query);
   int comp = Tree_AutoSuggestions(tree, *movieTable, query);
    if (comp == -1)
    printf("No other strings found with this prefix\n");
   else if (comp == 0)
    printf("No string found with this prefix\n");
 }


  MovieTable_Destroy(movieTable);
  Tree_Destroy(&tree);
  exit(EXIT_SUCCESS);
}





Configuration: Linux / Chrome 88.0.4324.150

1 réponse

wytekrow Messages postés 8 Date d'inscription lundi 30 novembre 2020 Statut Membre Dernière intervention 9 juillet 2021 2
Modifié le 15 févr. 2021 à 20:08
Bonjour,
pour émettre des «messages de debug» ce n'est pas judicieux d'utiliser printf, enfin plus précisément la sortie standard stdout. En effet, elle est bufferisée et avant qu'un affichage se déclenche il faut soit que le buffer soit plein, soit rajouter un retour à la ligne=\n (si le mode d'utilisation est le mode ligne, ce qui peut ne pas être toujours le cas).
Il est préférable pour ce genre de sorties d'utiliser stderr qui n'est jamais bufferisée via un fprintf →
    fprintf(stderr, "message de debug affiché immédiatement même sans \\n");


Ce qui est encore mieux pour débuguer est d'utiliser … un debugger ????
gdb par exemple … savoir utiliser un debuger est une compétence indispensable à acquérir lorsqu'on programme.
0