Rechercher : dans
Par :

Gestion d'erreur langage c?!?

Dernière réponse le 13 aoû 2007 à 13:17:10 padawan, le 10 jan 2005 à 01:00:47 
 Signaler ce message aux modérateurs

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 !!!!

Meilleures réponses pour « gestion d'erreur langage c?!? » dans :
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

Ravachol, le 10 jan 2005 à 09:03:28

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)

Répondre à Ravachol

2

Guki, le 10 jan 2005 à 09:34:24

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é.

Répondre à Guki

3

Ravachol, le 10 jan 2005 à 09:44:05

Salut,
Bien vu Guki, c'est effectivement un chiffre et pas un nombre que padawan veut tester.

A++

Répondre à Ravachol

4

padawan, le 10 jan 2005 à 22:30:02

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???

Répondre à padawan

5

Guki, le 11 jan 2005 à 14:43:07

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;
		}	
	}
}

Répondre à Guki

6

Guki, le 11 jan 2005 à 14:47:10

/* 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);
}

Répondre à Guki

7

padawan, le 11 jan 2005 à 19:59:25

Excusez moi je m'explique mal.

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

merci comme meme.

Répondre à padawan

8

padawan, le 11 jan 2005 à 20:04:57

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

Répondre à padawan

9

Guki, le 11 jan 2005 à 20:13:47

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.

Répondre à Guki

10

Guki, le 11 jan 2005 à 20:15:23

Excusez les erreurs d'écriture par la précipitation. :-/

Répondre à Guki

13

Ravachol, le 11 jan 2005 à 21:15:43

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)

Répondre à Ravachol

11

padawan, le 11 jan 2005 à 20:42:34

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.

Répondre à padawan

12

Guki, le 11 jan 2005 à 20:46:48

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. ^^

Répondre à Guki

14

padawan, le 11 jan 2005 à 21:25:49

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);
}

Répondre à padawan

15

padawan, le 11 jan 2005 à 21:37:27

J ai trouvé mon erreur merci a tous du temp que vous m avez consacré merci encore

Répondre à padawan

16

 Lamia, le 13 aoû 2007 à 13:17:10

Met des masques de saisie, comme ca si l'utilisateur veut taper un symbole, rien ne v'a s'écrire

Répondre à Lamia
Collection CommentÇaMarche.net