Gestion d'erreur langage c?!?

Résolu/Fermé
padawan - 10 janv. 2005 à 01:00
 Uluqriorra - 11 mars 2011 à 00:51
salutation

Comment tester si l'utilisateur a bien tapé un chiffre et non pas une lettre ou un symbole??

je n'arrive pas a voir la condition

merci !!!!

11 réponses

/* correction */

int isinteger(char *n)
{
	int i;
	int a;

	a = 0;
	for(i = 0; n[i] != 0; i++)
	{
		if(isdigit(n[i]))
		{
			a += 1
		}	
	}

	return a / strlen(n);
}
2
Ravachol Messages postés 566 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 120
10 janv. 2005 à 09:03
Salut,
Tentes une conversion chaine vers int en utilisant la fonction "strtol" et analyses le retour.

A++

C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
0
Salut!

Essaie ceci:

#include <ctype.h>

int isdigit(int c);


Si la fonction retourne un entier == 0 => false sinon => true. Il existe aussi d'autres fonctions pour connaitre le type de character déclarés dans le header précité.
0
Salut,
Bien vu Guki, c'est effectivement un chiffre et pas un nombre que padawan veut tester.

A++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sa marché presque avec int isdigit(int c);
mais le probleme c'est que sa va juste de 0 a 9!!
et j ai besoin de 0 a inf.

je peu faire comment???
0
Dans ce cas ce n'est plus un chiffre mais un nombre qu'il fallait dire. ;-)

/* exemple */

#include <ctype.h>

int isinteger(char *n)
{
	int i;

	for(i = 0; n[i] != 0; i++)
	{
		if(isdigit(n[i]))
		{
			return 1;
		}
		else
		{
			return 0;
		}	
	}
}
0
pour info il ya pas infini il jusqu'a "n" sinon est que ta deja vu un ordi avec une ram infini :D
0
excusez moi je m'explique mal.

le nombre ou le chiffre est dans int donc cela n'est pas valable

merci comme meme.
0
sinon voila le probleme plus directement

{
int y;
...
...
...
printf ("quelle ligne voulez vous modifiez?");
fflush(stdin);
scanf("%ld", &y);
...
...

}



si maintenant l'utilisateur se troupe et rentre une lettre ou un symbole le programme plante, j'aimerai juste un teste pour verifier si il a bien taper un nombre
0
Tu peux mettre:

#include <stdio.h>

char n;

scanf "%s", &n);


Une fois le nombre récupéré dans ta chaine t'applique la fonction que j'ai définie. ;-) Pour réutiliser le nombre pour un calcul tu fais:

#include <stdlib.h>

int x;

x = atoi(n);


J'espère que ma solution de conviendra.
0
Excusez les erreurs d'écriture par la précipitation. :-/
0
Ravachol Messages postés 566 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 120
11 janv. 2005 à 21:15
Salut,
Tu as juste à tester le retour de scanf sachant que ça renvoi 0 si aucune conversion n'a été faite.
Par exemple:
  if (scanf("%ld", &y)==0) printf("La saisie n'est pas un entier...");

A toi d'adapter la façon de gérer l'erreur, arrêter le prog, proposer une autre saise, etc.

A++

C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
0
sa marcherai, je vais faire comme ca merci !!

mais je trouvre que c'est un peu complexe pour un simple test non?? sa rajoute comme meme 10 ligne juste pour un simple test de cas d'erreur.
0
A défaut d'avoir tout fait il faut hélas faire soi même. Si une âme charitable trouve meilleur solution je lui laisse le soin de se faire connaitre. ^^
0
excuse moi ta fonction est excellante!!
le seul probleme(qui doit etre le mien) est que x = atoi(n);
ne passe pas, sa bug et il y a un

warning: passing arg 1 of `atoi' makes pointer from integer without a cast

int y,test;
char test2

printf ("quelle ligne voulez vous modifiez?");
fflush(stdin);
scanf ("%s", &test2);
y=atoi(test2);
test=isinteger(&test2);




int isinteger(char *n)
{
int i=0;
int a=0;

for(i = 0; n[i] != 0; i++)
{
if(isdigit(n[i]))
{
a += 1;
}
}

return a / strlen(n);
}
0
j ai trouvé mon erreur merci a tous du temp que vous m avez consacré merci encore
0
Met des masques de saisie, comme ca si l'utilisateur veut taper un symbole, rien ne v'a s'écrire
0