Bonjour,

J'ai un étrange problème. Voici un code qui permet de simuler l'envoi de messages saisie par un utilisateur. Il suffit à celui ci de taper quit pour arrêter d'envoyer des messages.

J'ai une fonction LireClavier qui retourne 1 si la saisie a correctement été traitée et 0 ou -1 en cas d'erreur.

Le fait que quand je compile, si j'affiche le buffer après saisie de l'utilisateur et ou la valeur de retourne la fonction LireClavier, le main agit correctement et continue de fonctionner jusqu'à la saisie de "quit".
En revanche, si jamais je n'affiche aucune de ces données avant d'utiliser la fonction CompareChaine dans le main, celui ci ce comporte comme si l'utilisateur avait tapé "quit".

Auriez vous une idée ? Merci d'avance.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int CompareChaine( char *chaine1, char *chaine2 );
int LongueurChaine ( char *chaine );
int LireClavier( char *buffer, int longueur );
 
int main (void)
{
    char *buffer = (char *)malloc(10*sizeof(char));
 
    if ( buffer != NULL )
       {
           int continuer = 1;
           while ( continuer == 1 )
           {
           char *arreter="quit";
 
           printf("\n\n envoi du message > ");
           int saisie = LireClavier( buffer, 10 );
           //printf("\n saisie = %d", saisie );
 
            if ( CompareChaine( buffer, arreter ) != 0 && saisie == 1 )
               {
                   printf("\n message envoye : %s", buffer);
               }
 
          else {
                   printf("\n arret de l'envoi des messages\n\n");
                   continuer = 0;
               }
          }
 
       }
 
  else {
          printf("\n Erreur allocation");
       }
 
       system("pause");
       return 0;
}
 
int LongueurChaine ( char *chaine )
{
    int longueur = 0;
    while ( *chaine != '\0' )
          {
              chaine++; 
              longueur++;
          }
 
    return longueur;
}
 
 
int CompareChaine( char *s, char *t )
{
 
    for ( ; *s == *t; s++, t++ )
        {
            if ( *s == '\0' )
               {
                   return 0;
               }
 
          else {
                   return *s - *t;
               }
        }
}
 
int LireClavier( char *buffer, int longueur )
{
     /* */
     if ( buffer != NULL )
        {
            /* Si la saisie a reussie */     
            if ( fgets( buffer, longueur, stdin ) != NULL )
               {
                   /* On supprime le possible retour chariot */     
                   int i=0;
                   while ( *buffer != '\0' )
                         {
                             if ( *buffer == '\n' )
                                {
                                    *buffer = '\0';
                                }
 
                             buffer++;
                         }
 
                   /* On retourne 1 : la saisie a correctement été traité */
                   /* On vide stdin en cas d'overflow du buffer */
                   fflush(stdin);
                   return 1;
               }
 
          /* Si erreur on retourne 0 */     
          else {
                   return 0;
               }                 
        }
   /* Si erreur, on retourne -1 */    
   else {
            return -1;
          }
}