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 :

Fonction chaine ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut Fonction chaine ?
    Bonjour,

    je suis, on va dire un peu "nouveau" au C et j'aimerais savoir si dans le include <string.h> il n'y aurait pas une fonction de type implode() de php, par exemple si j'ai la chaine suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char machaine[] = "comment|allez|vous";
    Je voudrais une fonction qui assemble en separant par "|" (dans cet exemple) dans un array par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%s",mot[1]);
    et ceci me donnerait "comment" ?

    Y'a-t-il une fonction pour faire ca?
    Merci.

  2. #2
    Expert éminent
    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
    Par défaut
    Citation Envoyé par sachav Voir le message
    je suis, on va dire un peu "nouveau" au C et j'aimerais savoir si dans le include <string.h> il n'y aurait pas une fonction de type implode() de php
    strtok() (bien lire la doc, il y a des précautions d'usage) ou la version POSIX.1 strtok_r() qui est moins problématique (mais non standard C).

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    Tout d'abord merci.

    Mais j'ai encore un petit probleme:
    Voila mon code:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int connect_user();
     
    int connect_user() {
    char *tok = NULL;
    long i = 0;
    int choice;
    char user[] = "";
    char pass[] = "";
    char currentdb[] = "a";
    int actchar = 0;
    FILE* db = NULL;
    db = fopen("test.txt","r");
                   if(db != NULL) {
     
                                                             fscanf(db,"%s",&currentdb);
                                                             printf("%s",currentdb);
                                                             tok = strtok(currentdb,"|");
                                                             printf("Nom du Client | Adresse\n");
                                                              while(tok != NULL ) {
                                                             printf( "%s+++",tok );
                                                            tok = strtok( NULL, "|" );   }            
                                                                       system("PAUSE");
                                                  }
                                              else {
                                              printf("Cannot find data file.\n");
                                              system("PAUSE");
                                                   }
                                                   }
     
    int main(int argc, char *argv[])
    {
    int choice;
    char user[] = "";
    char pass[] = "";
    char currentdb[] = "a";
    int actchar = 0;
    FILE* db = NULL;
    db = fopen("test.txt","r");
    printf("====Menu====\n");
    printf("1-Connect\n");
    printf("2-Close\n\n");
    printf("Please choose your option... ");
    scanf("%ld",&choice);
                        if(choice == 1) {
                                  printf("\n\nUsername: ");
                                  scanf("%s",&user);
                                  if(strcmp(user,"Sacha") == 0) {
                                      printf("\nUser %s OK. Password required.\n",user);
                                      printf("Password: ");
                                      scanf("%s",&pass);
     
                                              if(strcmp(pass,"monpass") == 0) {
                                                      printf("\nConnection successful.\n");
                                                      connect_user();
                                                                  } 
                                           else {
                                            printf("\nInvalid password.\n");
                                            system("PAUSE");
                                            }
                                            }
                                 else {
                                 printf("\nInvalid user.\n",user);
                                 system("PAUSE");
                                  }
                        } else if(choice == 2){
                        system("PAUSE");
                        }
                        else {
                        }
    }
    Dans mon fichier text.txt j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Bonjour|Comment|Allez|vous
    Quand je compile et j'execute, j'obtiens:

    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
     
    ====Menu====
    1. Connect
    2. Close
     
    Please choose your option... 1
     
     
    Username: Sacha
     
    User Sacha OK. Password required.
    Password: monpass
    Connection successful.
    Bonjour|Comment|Allez|vous
    Nom du Client | Adresse
    Bonjour+++Comm0"+++Press any key to continue. . .
    Et quand j'appuie sur n'importe quelle touche j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Project1.exe has encountered a problem and needs to close.
    We are sorry for the inconvenience.
    
    If you were in the middle of something, the information you were working on
    might be lost.
    
    Please tell Microsoft about this problem.
    We have created an error report that you can send to us. We will treat
    this report as confidential and anonymous.
    
    To see what this error report contains, click here.
    [[Send Error Report]] [Don't Send]
    Pourquoi est-ce que j'obtiens Bonjour+++Comm0"+++ ?
    D'ou viens la grosse erreur?
    Merci d'avance.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    Ok d'abord j'avais oublie l'include <string.h>

    Mais j'ai toujours la meme erreur :
    Project1.exe has encountered a problem and needs to close.
    We are sorry for the inconvenience.

    If you were in the middle of something, the information you were working on
    might be lost.

    Please tell Microsoft about this problem.
    We have created an error report that you can send to us. We will treat
    this report as confidential and anonymous.

    To see what this error report contains, click here.
    [[Send Error Report]] [Don't Send]

  5. #5
    Expert éminent
    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
    Par défaut
    Citation Envoyé par sachav Voir le message
    Voila mon code:
    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
    32
    33
    34
    35
    36
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:4: warning: function declaration isn't a prototype
    main.c:6: warning: function declaration isn't a prototype
    main.c: In function `connect_user':
    main.c:18: warning: char format, different type arg (arg 3)
    main.c:20: warning: implicit declaration of function `strtok'
    main.c:20: warning: assignment makes pointer from integer without a cast
    main.c:24: warning: assignment makes pointer from integer without a cast
    main.c:8: warning: unused variable `i'
    main.c:9: warning: unused variable `choice'
    main.c:10: warning: unused variable `user'
    main.c:11: warning: unused variable `pass'
    main.c:13: warning: unused variable `actchar'
    main.c:31: warning: control reaches end of non-void function
    main.c: In function `main':
    main.c:46: warning: long int format, int arg (arg 2)
    main.c:49: warning: char format, different type arg (arg 2)
    main.c:50: warning: implicit declaration of function `strcmp'
    main.c:53: warning: char format, different type arg (arg 2)
    main.c:65: warning: too many arguments for format
    main.c:38: warning: unused variable `currentdb'
    main.c:39: warning: unused variable `actchar'
    main.c: At top level:
    main.c:33: warning: unused parameter 'argc'
    main.c:33: warning: unused parameter 'argv'
    main.c: In function `main':
    main.c:73: warning: control reaches end of non-void function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 22 warnings
    Ca fout la trouille... Commence déjà par corriger ça...

    'currentdb' a une taille de 2 char. C'est suffisant ?
    'user' a une taille de 1 char. C'est suffisant ?
    'pass' a une taille de 1 char. C'est suffisant ?

    Ceci fonctionne :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int connect_user (void)
    {
       int err = 0;
       FILE *db = fopen ("text.txt", "r");
       if (db != NULL)
       {
          char *tok = NULL;
          char currentdb[256] = "";
     
          int n = fscanf (db, "%255s", currentdb);
          if (n == 1)
          {
             printf ("'%s'\n", currentdb);
             tok = strtok (currentdb, "|");
             printf ("Nom du Client | Adresse\n");
             while (tok != NULL)
             {
                printf ("%s+++", tok);
                tok = strtok (NULL, "|");
             }
             printf ("\n");
          }
          else
          {
             printf ("erreur de lecture (n = %d)\n", n);
             perror ("");
          }
          fclose (db);
       }
       else
       {
          printf ("Cannot find data file.\n");
          err = 1;
       }
     
       return err;
    }
     
    int main (void)
    {
       int choice;
       char user[32] = "";
       char pass[32] = "";
       printf ("====Menu====\n");
       printf ("1-Connect\n");
       printf ("2-Close\n\n");
       printf ("Please choose your option... ");
       scanf ("%d", &choice);
       switch (choice)
       {
       case 1:
          printf ("\n\nUsername: ");
          scanf ("%31s", user);
          if (strcmp (user, "Sacha") == 0)
          {
             printf ("\nUser %s OK. Password required.\n", user);
             printf ("Password: ");
             scanf ("%31s", pass);
     
             if (strcmp (pass, "monpass") == 0)
             {
                printf ("\nConnection successful.\n");
                connect_user ();
             }
             else
             {
                printf ("\nInvalid password.\n");
             }
          }
          else
          {
             printf ("\nInvalid user : %s.\n", user);
          }
          break;
       case 2:
          break;
     
       default:
          ;
       }
       return 0;
    }
    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
     
    ====Menu====
    1-Connect
    2-Close
     
    Please choose your option... 1
     
     
    Username: Sacha
     
    User Sacha OK. Password required.
    Password: monpass
     
    Connection successful.
    'Bonjour|Comment|Allez|vous'
    Nom du Client | Adresse
    Bonjour+++Comment+++Allez+++vous+++
     
    Press ENTER to continue.
    Pose des questions si tu ne comprends pas.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    J'ai quand meme une petite question:
    J'utilise dev-cpp et j'obtenais aucune erreur.. Comment avez-vous eu les erreurs ?

    'currentdb' a une taille de 2 char. C'est suffisant ?
    'user' a une taille de 1 char. C'est suffisant ?
    'pass' a une taille de 1 char. C'est suffisant ?
    Pourquoi ? Je pensais que [] voulait dire que la taille etait indefinie ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ben non. Ça veut dire "la taille de ce qu'il y a de l'autre côté du =".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent
    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
    Par défaut
    Citation Envoyé par sachav Voir le message
    J'utilise dev-cpp et j'obtenais aucune erreur.. Comment avez-vous eu les erreurs ?
    Je ne l'avais pas indiqué ?

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

Discussions similaires

  1. Probleme fonction chaine
    Par loncle dans le forum Général Python
    Réponses: 1
    Dernier message: 30/05/2014, 00h52
  2. Fonction Chaine[i] vide
    Par BuzzLeclaire dans le forum Langage
    Réponses: 7
    Dernier message: 22/11/2012, 00h06
  3. MySQL : cherche une fonction chaine de caractères
    Par raton_laveur dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/08/2010, 17h47
  4. Réponses: 1
    Dernier message: 30/03/2007, 16h38
  5. Problème fonctions chaines de caractères.
    Par Hayron06 dans le forum C
    Réponses: 12
    Dernier message: 13/11/2006, 21h47

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