IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Convertir une chaine de caractere en tableau de int


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Points : 53
    Points
    53
    Par défaut Convertir une chaine de caractere en tableau de int
    Bonjour,
    J'ai un probleme sur cette conversion, j'ai fait un programme qui effectue un traitement sur des tableau de int, probleme, pour le moment je code en dure dans mon programme un tableau d'entier.
    Je souhaiterais qu'un utilisateur puisse le saisir, comment faire ?
    methodes envisagées :

    - qu'il saisisse directement un tableau de int, mais le tableau doit avoir une taille variable je ne peu donc pas fixer ça taille.

    -qu'il utilise une chaine de caractere, mais les char doivent obligatoirement etres des nombres, et ensuite convertir grace a la fonction atoi()

    bref je ne sais pas comment m'y prendre pourrier vous m'eclairé svp, merçi d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Pour la taille du tableau, ce n'est pas un problème: Tu peux toujours au pire, faire une phase de comptage, réserver le tableau, et faire une phase de remplissage.
    Tes entiers doivent être séparés par quelque chose, dans la chaîne. Des espaces, par exemple. Ensuite, tu peux analyser la chaîne dans une boucle avec des appels à strtok() ou plus simplement à strchr()...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Points : 53
    Points
    53
    Par défaut
    oui je te remercie mais kel methode serait la plus simple ?

    pour l'instant j'ai proceder comme cela mais je n'arrive pas a retrouver le tableau saisie par l'utilisateur, (il s'appele circuit) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    int taille;
    int *circuit = (int*)calloc(taille,sizeof(int)); 
     
    printf("Saisir un circuit combinatoire de type int,int,int,...,int\n");
    scanf("%d",*circuit);
    printf("\n");
     
    printf("%d\n",*circuit);

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    salut,

    Tu as en réalité besoin de 2 tableaux ; ou plutôt une chaîne de caractères et un tableau.

    le scanf va à partir de ce que l'utilisateur a saisi, stocker en mémoires les codes ascii dans une chaine de caractères que tu aura définie

    ensuite tu devra extraire les nombres (en recherchant les positions des , et du \0 indiquants la fin de la chaine) et le convertir du format ascii au format int

    actuellement circuit pointe vers une liste d' int et tu y met des char ; il est normal que tu ne les retrouve pas.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Points : 53
    Points
    53
    Par défaut
    Arf j'ai pas tous saisie peu tu etre + precis stp, je rame un peu la :s

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int *circuit = (int*)calloc(taille,sizeof(int)); 
    ..... 
    scanf("%d",circuit);

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    ce que veut dire diogéne c'est que là tu ne saisis que 1 entier...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Points : 53
    Points
    53
    Par défaut
    il faudrait donc plutot que je me dirige vers une saisie en chaine de caractère, avec l'utilisation de la fonction strtok pour garder seulement les entier et strlen pour avoir la taille de mon tableau , mais une fois cela fait comment convertir ma chaine compacté en tableau de int et commen interdire la saisie de caractere non numérique ?

    erf j'ai l'impression que ce que je veux faire est impossible ...

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    C'est très possible, encore faut-il savoir les connaissances de base du C....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    int taille;
    int i=0, j=0 ;
    int *circuit = (int*)calloc(taille,sizeof(int)); 
     
    if ( circuit == NULL )
        fprintf ( stderr, "\nERREUR d'ALLOCATION !!\n");
    else
      {
         printf("Saisir un circuit combinatoire de type int,int,int,...,int [-1 pour finir]\n");
         while ( 1 )
           { 
              scanf("%d", &j);
              printf("\n");
              if ( j < 0 )
                break ;
     
              circuit[i] = j ;
              i++ ;
              if ( i == taille )
                break ;
          }
     
         for ( j = 0 ; j < i ; j++ )
            printf("%d\n",circuit[i]);
      }

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Points : 53
    Points
    53
    Par défaut
    ok merçi j'ai modifier ton code, car il y'avait des chose qui ne fonctionnait pas , mais le compilateur me sort une erreur d'execution car la variable taille n'est pas initialisé, donc la compilation ne passe pas le calloc, comment esoudre se probleme sachant ke je ne peu pas conaitre la taille de mon tableau avant de l'avoir rempli :s

    je vous ajoute le code ci joint et le message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    int taille;
    int i=0, j=0 ;
    int *circuit = (int*)calloc(taille,sizeof(int));
     
    if ( circuit == NULL )
    {
        fprintf ( stderr, "\nERREUR d'ALLOCATION !!\n");
    }
    else
      {
         printf("Saisir un circuit combinatoire de type int,int,int,...,int [-1 pour finir]\n");
         while ( 1 )
           { 
              scanf("%d", &j);
              printf("\n");
              if ( j < 0 )
                break ;
     
    		  circuit[i] = j ;
              i++ ;
              if ( i == taille )
                break ;
          }
     
         for ( j = 0 ; j < i ; j++ )
    		 printf("%d\n",circuit[j]);
    	 taille = i;
    	 printf("%d\n",taille);
      }

    ErrEuR :

    Run-Time Check Failure #3 - the variable "taille" is being used without being definied

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par oldscrout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int taille;
    <...>
    int *circuit = (int*)calloc(taille,sizeof(int));
    Run-Time Check Failure #3 - the variable "taille" is being used without being definied
    Bah,oui, c'est assez clair. Combien vaut taille ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Points : 53
    Points
    53
    Par défaut
    marf je viens de me rendre compte de ma betise, me suffisait de declarer une grande taille, juste pour allouer de la mémoire a mon tableau, merçi a tous de m'avoir aider.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/10/2009, 12h31
  2. Réponses: 3
    Dernier message: 15/08/2007, 15h52
  3. Convertir une chaine de caractère en tableau
    Par Mysti¢ dans le forum Général Python
    Réponses: 7
    Dernier message: 09/04/2007, 13h20
  4. convertir une chaine de caractere en byte []
    Par youp_db dans le forum Langage
    Réponses: 10
    Dernier message: 16/10/2006, 16h14
  5. [VB]Convertir une chaine de caractere en entier
    Par budylove dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/02/2006, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo