Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec l'utilisation de la fonction isdigit

    21 septembre 2017 à 19:13:58

    Bonjour !

    Je rencontre un problème avec l'utilisation de la fonction isdigit(). Ma fonction en gros convertie heures, minutes, secondes en secondes . Merci par avance !

    // TD 1 : Exercice 3 //
    
    #include <stdio.h>
    #include <ctype.h>
    
    void conversion_en_seconde(int *pheures, int *pminutes, int *psecondes);
    
    void conversion_en_seconde(int *pheures, int *pminutes, int *psecondes)
    {
    	*pheures = (*pheures) * 3600;
    	*pminutes = (*pminutes) * 60;
    	*psecondes = (*psecondes) + (*pheures) + (*pminutes) ;
    }
    
    
    int main(int argc, char *argv[])
    {
    	int cpt = 0;
    	int secondes = 0, minutes = 0, heures = 0;
    	int *psecondes = &secondes, *pminutes = &minutes, *pheures = &heures;
    
    	printf("<<<<<< TD 1 : Exercice 1 >>>>>>\n\n");
    	printf("<<<<<< Saisissez un nombre de seconde >>>>>>\n");
    	scanf("%d",&secondes);
    	printf("<<<<<< Saisissez un nombre de minute >>>>>>\n");
    	scanf("%d",&minutes);
    	printf("<<<<<< Saisissez un nombre d'heure >>>>>>\n");
    	scanf("%d",&heures);
    
    	char c1 = 'secondes';
    	char c2 = 'minutes';
    	char c3 = 'heures';
    
    
    	if(isdigit(c1) & isdigit(c2) & isdigit(c3))
    	{
    		conversion_en_seconde(pheures, pminutes, psecondes);
    
    		printf("<<<<<<Le nombre de seconde total est %d\n",secondes);
    	}
    	
    	else
    	{
    		printf("Erreur");
    		cpt ++;
    	}
    
    	while(cpt != 0)
    	{
    		printf("<<<<<< Saisissez un nombre de seconde >>>>>>\n");
    		scanf("%d",&secondes);
    		printf("<<<<<< Saisissez un nombre de minute >>>>>>\n");
    		scanf("%d",&minutes);
    		printf("<<<<<< Saisissez un nombre d'heure >>>>>>\n");
    		scanf("%d",&heures);
    
    		if(isdigit(secondes) & isdigit(minutes) & isdigit(heures))
    		{
    			conversion_en_seconde(pheures, pminutes, psecondes);
    
    			printf("<<<<<<Le nombre de seconde total est %d\n",secondes);
    			cpt = 0;
    		}
    
    		else
    		{
    			printf("Erreur");
    		}
    
    	}
    
    	return 0;
    }



    • Partager sur Facebook
    • Partager sur Twitter
      21 septembre 2017 à 19:19:06

      Yop,

      Je n'ai pas regardé plus que ça :

      char c1 = 'secondes';
          char c2 = 'minutes';
          char c3 = 'heures';
       
       
          if(isdigit(c1) & isdigit(c2) & isdigit(c3))
          {
              conversion_en_seconde(pheures, pminutes, psecondes);
       
              printf("<<<<<<Le nombre de seconde total est %d\n",secondes);
          }

      Les initialisations sont foireuses, une chaîne de caractères entre simples quotes pour initialiser des char ... ça n'a pas de sens. Est-ce vraiment l'opérateur & que tu veux utiliser dans le if(), ou bien est-ce && ?
      Ah je viens de comprendre, tu veux donner la valeur des variables secondes minutes et heures (int) à c1 c2 et c3 je pense ?

      -
      Edité par Gam' 21 septembre 2017 à 19:20:12

      • Partager sur Facebook
      • Partager sur Twitter
        21 septembre 2017 à 19:28:54

        Merci de ta réponse ! Oui exactement
        • Partager sur Facebook
        • Partager sur Twitter
          21 septembre 2017 à 19:52:15

          Hello,

          A part le fait que je ne comprends pas ta logique (pourquoi deux fois des inputs et que c1, c2 et c3 ne servent à rien) et que ça ne compile pas, isdigit() prend un char (qui sera converti en int) en entrée, pas un int ! Exemple:

          #include <stdio.h>
          #include <stdbool.h>
          
          bool is_it_a_number(char *str) {
          	while(*str) {
          		if(isdigit(*str)==0)
          			return(false);
          		str++;
          	}
          	return(true);
          }
          
          int main(void) {
          	char *n1="1234";
          	char *n2="12E4";
          	
          	printf("%s is%sa number\n",n1,is_it_a_number(n1)==true ? " ": " not ");
          	printf("%s is%sa number\n",n2,is_it_a_number(n2)==true ? " ": " not ");
          
          	return(0);
          }

          De plus, la fonction conversion_en_seconde() ne doit pas recevoir des pointeurs. A cause d'eux, tu modifies les valeurs de heures, minutes et secondes entrées par l'utilisateur:

          time_t conversion_en_seconde(int heures,int minutes,int secondes)
          {
              return(heures*3600+minutes*60+seconds);
          }
          

          -
          Edité par edgarjacobs 21 septembre 2017 à 19:53:01

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

          Problème avec l'utilisation de la fonction isdigit

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown