Gestion d'erreur langage c?!?

Résolu
padawan -  
 Uluqriorra -
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

  1. Guki
     
    /* 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
  2. Ravachol Messages postés 568 Statut Membre 120
     
    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
  3. Guki
     
    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
  4. Ravachol
     
    Salut,
    Bien vu Guki, c'est effectivement un chiffre et pas un nombre que padawan veut tester.

    A++
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. padawan
     
    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
    1. Guki
       
      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
    2. Uluqriorra
       
      pour info il ya pas infini il jusqu'a "n" sinon est que ta deja vu un ordi avec une ram infini :D
      0
  7. padawan
     
    excusez moi je m'explique mal.

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

    merci comme meme.
    0
  8. padawan
     
    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
    1. Guki
       
      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
    2. Guki
       
      Excusez les erreurs d'écriture par la précipitation. :-/
      0
    3. Ravachol Messages postés 568 Statut Membre 120
       
      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
  9. padawan
     
    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
    1. Guki
       
      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
  10. padawan
     
    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
  11. padawan
     
    j ai trouvé mon erreur merci a tous du temp que vous m avez consacré merci encore
    0
  12. Lamia
     
    Met des masques de saisie, comme ca si l'utilisateur veut taper un symbole, rien ne v'a s'écrire
    0