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
| /*
Name: fgets vs scanf
Copyright: GPL
Authors: Samy Hocine, Thierry Chappuis
Date: 03/09/07 09:24
Description: Little code
*/
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
/* Si tu utilises strcmp(), il faut include ce fichier d'en-tête */
#include <string.h>
void fclean(char *s_buffer, FILE *stream);
int main(void)
{
/* -TC- C'est une bonne habitude de déclarer une variable par ligne. Dans
le contexte d'une chaine de caractères, il est également conseillé
d'initialiser avec une chaine vide.
*/
char str[256] = "";
char str2[256] = "";
puts("Exemple with good functions");
puts("str =");
/* -TC- Je teste en général la valeur retournée par fgets(). C'est en
général une bonne habitude. Ici, ce n'est pas primordial.
*/
fgets(str, sizeof str, stdin);
/* -TC- Cela n'a pas de sens d'utiliser fclean() avec le flux stdout. Pour
purger le flux de sortie standard, il y a la fonction fflush() déclarée
dans le fichier d'en-tête standard stdio.h.
*/
fclean(str, stdin);
puts("str2=");
fgets(str2, sizeof str2, stdin);
/* -TC- Idem: stdout remplacé par stdin */
fclean(str2, stdin);
if (strcmp (str, str2) == 0)
{
puts("str = str2");
}
else
{
puts("str != str2");
}
/* A quoi te servent ces fonctions dans ta démonstration. Essaie de ne pas
utiliser des fonctions non-standard lorsque ce n'est pas nécessaire */
/* getch(); */
/* clrscr(); */
//Example with bad functions
puts("Exemple with bad functions");
/* ... */
return 0;
}
void fclean(char *s_buffer, FILE *stream)
{
if (s_buffer != NULL && stream != NULL)
{
char *pc = strchr(s_buffer, '\n');
if (pc != NULL) /* La saisie n'a pas été tronquée */
{
/* On remplace '\n' par le caractère nul '\0' */
*pc = 0;
}
else
{
/* La saisie a été tronquée, on purge le flux d'entrée */
int c;
while ((c = fgetc(stream)) != '\n' && c != EOF)
{
continue;
}
}
}
} |
Partager