empecher une erreur de frappe... [C] - Programmation
Marsh Posté le 11-05-2001 à 15:22:43
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);
}
Marsh Posté le 11-05-2001 à 15:25:32
Merci kill9
Pr le scanf je sais ce foutu & je l'oublie tjrs !!
Je vais essayer
Marsh Posté le 11-05-2001 à 15:36:53
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;
Marsh Posté le 11-05-2001 à 15:45:41
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 !
Marsh Posté le 11-05-2001 à 15:50:41
Gloups (le Retour).
même pas fais gaffe a ca...puff....ok je pars m'acheter le C pour les Nulls
Marsh Posté le 11-05-2001 à 17:23:25
Aricoh a écrit a écrit : 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 ! |
Je sais pas faire ca....
En fait le real problem c'est que je veux empecher toutes les erreurs de frappes... caracteres et touches genre F1 a F12...
>> kill9 pas mal la notation hongroise ...
Marsh Posté le 11-05-2001 à 18:39:54
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
Marsh Posté le 11-05-2001 à 19:09:06
Aricoh a écrit a écrit : 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 |
Nickellllll je vais le faire tourner et améliorer ca de facon a ce qu'on se fasse jeter meme si on tape 5.75...
Aricoh
Marsh Posté le 12-05-2001 à 14:23:14
Texla a écrit a écrit : Nickellllll je vais le faire tourner et améliorer ca de facon a ce qu'on se fasse jeter meme si on tape 5.75... |
Avec ma fonction, si le type tape 5.75 pour faire le gros malin du village, la fonction va retourner 5, valeur qui sera prise en compte pour la suite de ton programme. C'est pas plus mal après tout ? Tel est pris qui croyait faire bugger !
Sans la fonction, le mec tape 5.75 et le programme ne sortira plus de la boucle do_while
Marsh Posté le 13-05-2001 à 21:02:02
j'arrive pas quand on tape un nombre a virgule ....
kelkun peut m'aider?
[edit]--Message édité par Texla--[/edit]
Marsh Posté le 15-05-2001 à 09:39:09
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+
Marsh Posté le 11-05-2001 à 15:08:13
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);
}
[edit]--Message édité par Texla--[/edit]
---------------
-