je voudrais savoir comment faire pour contrôler la saisie des données en C (contrôler pour que les données soient entières) , je fais référence en Pascal où on utilise la procédure ioresult pour contrôler la saisie des entier par exemple.
je voudrais savoir comment faire pour contrôler la saisie des données en C (contrôler pour que les données soient entières) , je fais référence en Pascal où on utilise la procédure ioresult pour contrôler la saisie des entier par exemple.
Que les données "soivent" ???
Bon ben pour controler qu'une donnée soive entière, faut utiliser le retour de scanf car il te retourne le nb d'éléments réellement traités
Exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 char saisie[1024]; int nb; while (1) { printf("Entrez un nombre :"); fgets(saisie, 1024, stdin); if (sscanf(saisie, "%d", &nb) == 1) break; printf("Saisie invalide => try again !!!\n"); }
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Bonsoir Sve@r, vos codes la ne font pas vraiment ce que je cherche car on sort de la boucle quand c'est pas un entier n'est pas saisie.
par exple en pascal on peut écrire
Var N:integr;
Repeat
{$i-}Read(N);{$i+}
Until (IOresult=0);
On sortira de la boucle que si un entier est saisie.
J'ai trouve un code qui fait ce travail, mais avant de le mettre en ligne je doit le commenter.
merci pour votre code et je vous demande de commanter un peu prochaine vos codes.
Moi je dirais plutôt fgets + strtol
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 #include <stdio.h> #include <stdlib.h> int main() { char s[10]; int n, ok; ok = 0; /* ok = FAUX */ do { char * p_stop; /* saisir une chaine */ printf("Entrez un entier : "); fflush(stdout); fgets(s, sizeof(s), stdin); /* Convertir s en int */ n = (int)strtol(s, &p_stop, 10); /* Tester si la conversion s'est bien passee */ if (*p_stop == '\n' || *p_stop == '\0') ok = 1; /* ok = VRAI */ else printf("'%c' n'est pas un caractere valide. Recommencez.\n", *p_stop); } while ( !ok ); printf("Vous avez entre %d\n", n); return 0; }
En effet ...
Sur un fgets, il ne faudrait pas tester si tout est ok? C'est à dire rechercher le '\n' ou sinon vider le buffer ?
Pas de Wi-Fi à la maison : CPL
Euh, tu as testé ?
C'est quoi le problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Entrez un nombre :aaa Saisie invalide => try again !!! Entrez un nombre :12 Press ENTER to continue.
Pas de Wi-Fi à la maison : CPL
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager