| |||||
| Dernière réponse | |
|---|---|
| Sujet : [C] empecher une erreur de frappe... | |
| Texla | :) :jap: |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| Texla | :) :jap: |
| kill9 | Ca devrais t'aider.
/* Utilisation des macros de test de caracteres pour realiser une fonction lisant un entier au clavier */ #include <stdio.h> #include <ctype.h> int get_int(void); void main() { int x; x = get_int(); printf("Vous avez tape : %d\n", x); } int get_int(void) { int ch, i, sign = 1; /* Ignorer les espaces en tete. */ while (isspace(ch = getchar())); /* Si le premier caractere n'est pas numerique, le recracher et renvoyer 0 */ if (ch != '-' && ch != '+' && !isdigit(ch) && ch != EOF) { ungetc(ch, stdin); return 0; } /* Si le premier caractere est un signe moins, placer le signe du resultat. */ if (ch == '-') sign = -1; /* Si le premier caractere est un signe + ou un signe -, lire le caractere suivant */ if (ch == '+' || ch == '-') ch = getchar(); /* Lire des caracteres jusqu'... en trouver un qui ne soit pas un chiffre. Effectuer la conversion en multipliant chacun des chiffres lus par la bonne puissance de 10 */ for (i = 0; isdigit(ch); ch = getchar()) i = 10 * i + (ch - '0'); /* Corriger eventuellement le signe. */ i *= sign; /* Si on n'a pas rencontre d'EOF, c'est qu'on a lu un caractere non numerique. Le recracher. */ if (ch != EOF) ungetc(ch, stdin); /* Renvoyer la valeur finale. */ return i; } Voilaaaaaa ! a+ |
| Texla | up!! ;) |
| Texla | :cry: :cry: j'arrive pas quand on tape un nombre a virgule ....
:sweat: kelkun peut m'aider? [edit]--Message édité par Texla--[/edit] |
| Aricoh |
|
| Texla |
|
| Aricoh | ok, voici un extrait du code avec fonction atoi
char buffer[3]; int nombre; do { printf ("Un nombre entre 5 et 15 SVP : " ); fgets (buffer, 3, stdin); nombre = atoi(buffer); } while (nombre < 5 || nombre > 15); détails : tu déclare un petit tableau qui récupère la saisie telle qu'elle est, de l'int ou du char ou ce que tu veux, peu importe fgets (buffer .....), c'est la récupération de la saisie dont je parle, tu ne récupères que (2+1) caractères (+1 pour le '\0'), le surplus va dans stdin, ça n'est pas pris en cpte dans ton prog' nombre = atoi(buffer) là, ça renvoit (si le contenu de buffer est un int) dans nombre la valeur numérique si le type tape pour rigoler 'cc', la fonction atoi va retourner 0 dans nombre, le type se fait jeter. Si le type tape (encore pour ricaner bêtement) 5.75, ça ne prendra que 5 et ça passe |
| Texla |
|
| kill9 | Gloups (le Retour).
même pas fais gaffe a ca...puff....ok je pars m'acheter le C pour les Nulls |
| Aricoh | Fais un test en tapant 5.5 dans ton programme
A mon avis, il va planter, ça me l'a déjà fait sur le même genre de code il faut employer un atoi (ascii to int) pour la récupération de la saisie Et ça, ça marche du feu de dieu ! |
| kill9 | Gloups, j'ai oublier les includes et le retour chariot du 2eme printf().
desole. #include <stdio.h> #include <stdlib.h> void main(void) { int iNumero; printf("Tapez un numéro de 5 à 15: " ); scanf("%d", &iNumero); while (iNumero < 5 || iNumero > 15) { printf("\nErreur de frappe, entrez un numero compris entre 5 et 15: " ); scanf("%d", &iNumero); } printf("Vous avez tapez le numero %d", iNumero); } voila. Pour les variables, puisque tu debutes, prends l'habitude des les nommer de facon a ce que si ton prog faisait 2000 lignes tu saches de quelles variable il sagit, puis tu rajoute la notation hongroise.C'est initiale du type de la variable. ex:"i" pour "int" puis majuscule a chaque mot. ex 2: int iVariableNumerique; int iCompteur; |
| Texla | Merci :jap: kill9 :jap: Pr le scanf je sais ce foutu & je l'oublie tjrs !! Je vais essayer :) :benetton: :jap: |
| kill9 | Avant toute chose, ton scanf() contient une erreur.
c'est pas scanf(%d", c) mais scanf("%d", &c). pourquoi &: pour indiquer de ranger la valeur dans l'adresse de la variable c. voici ton prog. void main(void) { int iNumero; printf("Tapez un numéro de 5 à 15: " ); scanf("%d", &iNumero); while (iNumero < 5 || iNumero > 15) { printf("Erreur de frappe, entrez un numero compris entre 5 et 15" ); scanf("%d", &iNumero); } printf("Vous avez tapez le numero %d", iNumero); } |
| Texla | helloooooo
j'aimerais savoir comment faire pr ne recuperer apres une frappe clavier que les numeros de 5 a 15 mais je sais pas faire la condition... voila a quoi j'ai pensé... printf("tapez un numero de 5 a 15" ); scanf("%d",c); while(condition) { printf("erreur de frappe, entrez un numero compris entre 5 et 15" ); scanf("%d",c); } :jap: [edit]--Message édité par Texla--[/edit] |




