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 :

Erreur d’exécution de while


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut Erreur d’exécution de while
    Bonjour tout le monde;
    Je suis entrain de tester la solution d'un exercice en C avec l'éditeur Code:Blocks; mais après la compilation de l'exercice ça saute sur des ligne dans l’exécution;
    J'ai essaye avec mon ancien projet aussi ça n'a rien changé;

    je voudrais votre aide pour débloquer cette erreur

    Merci d'avance;

    Premier exo avec While : dans while ça affiche deux fois
    un autre:
    un autre:
    avant la lecture du caractère

    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
    #include<stdio.h>
    #define t 50
    int main(void){
    int i,j,n,nb;
    char tab[t], voyelle[]={'a','e','i','j','u','y'};
    i=0;
    n=0;
    nb=0;
    printf("un caractère:");
    printf("\n");
    scanf("%c",&tab[i]);
     
    while(tab[i]!=' ' ){
    ++i;
    printf("un autre:");
    printf("\n");
    scanf("%c",&tab[i]);
    }
    n=i;
    for(i=0;i<n;i++){
    printf("tab[%d]=%c \n",i,tab[i]);
    }
    for(i=0;i<n;i++){
    printf("%c ",tab[i]);
    }
    for(j=0;j<6;j++){
    for(i=0;i<n;i++){
    if(tab[i]==voyelle[j])
        nb++;
    }
    printf("Vous avez %d fois voyelle(s) %c ",nb,voyelle[j]);
    printf("\n");
    nb=0;
    }
     
    return 0;
     
    }
    le projet avec la partie Saisie:ça saute toujours deux lignes
    donner le nom
    donner le prenom
    avant de lire ou le scanf()
    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
    void Saisie(struct Etudiant E1[], int *n){
    int i=0;
    printf("donner un numero:");
    printf("\n");
    scanf("%d",&E1[i].num);
    while(E1[i].num!=-1){
        printf("donner le nom");
        printf("\n");
        scanf("%c",&E1[i].nom);
        printf("\n");
        printf("donner le prenom");
        printf("\n");
        scanf("%c",&E1[i].prenom);
        printf("\n");
        printf("donner un numero:");
        printf("\n");
        scanf("%d",&E1[i].num);
        i++;
    }
    *n=i;
    }

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour

    C'est un souci récurrent dans l'apprentissage du C pour un débutant. Les profs, pour se simplifier la vie, introduisent assez vite la notion de "scanf()". Or "scanf" (Scan Formaté) attend une entrée "formatée" et ce qu'on tape au clavier est tout sauf formaté.

    Quand tu saisis ta lettre via scanf("%c", &tab[i]), tu tapes ta lettre et tu valides par l'appui sur la touche <return>. Ben la lettre est correctement capturée par le scanf() mais cette touche <return> reste dans le tampon clavier. Et à la boucle suivante, le scanf() suivant lit ce <return> (qui est lui-aussi un caractère) et le récupère sans attendre que tu tapes une touche. Ce qui te donne l'illusion que le scanf() n'a rien fait. pourtant le tableau a bel et bien été rempli. Tu le verras si tu remplaces printf("tab[%d]=%c \n",i,tab[i]) par printf("tab[%d]=%c (%d)\n", i, tab[i], tab[i]) tu verras que tab[i] contient bel et bien des valeurs (valeur 10 représentant le caractère <return>).

    Solution palliative (avant que tu aies les connaissances adéquates pour pouvoir créer des saisies plus robustes): rajouter un fgetc(stdin) juste après le scanf() pour supprimer ce <return>. A faire chque fois que tu fais saisir un char, un int ou un float (dans ce cas le <return> n'est pas récupéré et reste dans le clavier). Pour les strings ce n'est pas nécessaire (puisque le <return> faisant partie de la string, dans ce cas, est correctement récupéré et disparait alors du clavier).

    Accessoirement, pour l'exo sur les étudiants, je ne suis pas certain que l'instruction scanf("%c",&E1[i].nom) soit des plus adéquates (ou alors le nom c'est juste "un caractère"?). Faut éviter de copier/coller des instructions sans réfléchir un petit peu au préalable. Et pareil quand tu définis les voyelles comme contenant la lettre 'j'... Et ce n'est pas interdit d'indenter et aérer ton code, cela ne compilera pas moins vite et le rendra plus lisible.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    Merci le premier est réglé;
    le deuxième ne sort pas de la boucle quand je tape -1

    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
     
     
    #include<stdio.h>
    #define t 50
     
    struct Etudiant{
           int num;
           char nom[30];
           char prenom[50];
    } E1[t];
     
    void Saisie(struct Etudiant E1[], int *n){
     
    int i=0;
     
    printf("donner un numero:\n");
    scanf("%d",&E1[i].num);
    fgetc(stdin);
     
    while(E1[i].num!=-1){
     
        printf("donner le nom\n");
        scanf("%s",&E1[i].nom);
        printf("\n");
     
        printf("donner le prenom\n");
        scanf("%s",&E1[i].prenom);
        printf("\n");
     
        printf("donner un numero:\n");
        scanf("%d",&E1[i].num);
        fgetc(stdin);
        printf("\n");
     
         i++;
                               }
     
    *n=i;
     
    }

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sandaff Voir le message
    le deuxième ne sort pas de la boucle quand je tape -1
    Concentre-toi sur la valeur de "i". Demande-toi ce qui se passe quand tu fais saisir E1[i].num et que tu évalues E1[i].num au tour suivant.

    Et scanf("%s",&E1[i].nom) c'est un petit peu mieux que tout à l'heure... mais pas encore parfait...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Concentre-toi sur la valeur de "i". Demande-toi ce qui se passe quand tu fais saisir E1[i].num et que tu évalues E1[i].num au tour suivant.

    Et scanf("%s",&E1[i].nom) c'est un petit peu mieux que tout à l'heure... mais pas encore parfait...
    Un affichage en fin de boucle while me montre que E1[i].num=-1 donc la valeur est correcte; le problème reste le même;

    scanf("%s",&E1[i].nom) qu'est ce qui est plus parfait à ce niveau?

    Merci pour votre précieux temps pour moi

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sandaff Voir le message
    Un affichage en fin de boucle while me montre que E1[i].num=-1 donc la valeur est correcte
    Est-ce que cet affichage (un printf je pense) est vraiment vraiment vraiment la toute toute toute dernière instruction de cette boucle??? Tu n'as pas mis le code mais franchement cela m'étonnerait. Et quand je dis que l'indentation est importante pour la lisibilité, c'est qu'elle est importante pour la lisibilité (pouvoir lire rapidement ce qui se passe à quel moment)

    Citation Envoyé par sandaff Voir le message
    scanf("%s",&E1[i].nom) qu'est ce qui est plus parfait à ce niveau?
    Pas de "&" pour les chaines, leur nom correspond déjà à une adresse...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    merci

    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
     
    void Saisie(struct Etudiant E1[], int *n){
     
    int i=0;
     
    printf("donner un numero:\n");
    scanf("%d",&E1[i].num);
    fgetc(stdin);
     
    while(E1[i].num!=-1){
     
        printf("donner le nom\n");
        scanf("%s",E1[i].nom);
        printf("\n");
     
        printf("E1[%d]=%s\n",i,E1[i].nom);
        printf("\n");
     
        printf("donner le prenom\n");
        scanf("%s",E1[i].prenom);
        printf("\n");
     
         printf("E1[%d]=%s\n",i,E1[i].prenom);
        printf("\n");
     
        printf("donner un numero:\n");
        scanf("%d",&E1[i].num);
        fgetc(stdin);
     
        printf("\n");
        printf("E1[%d]=%d\n",i,E1[i].num);
     
         i++;
     
     
                              }
    *n=i;
    }

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sandaff Voir le message
    Un affichage en fin de boucle while me montre que E1[i].num=-1
    Ben voilà. La preuve est faite que cet affichage, en ligne 31, ne se trouve pas en fin de boucle (qui est ligne 36). Ok il est "vers la fin", ok il est "proche de la fin", mais il ne se trouve pas "à la fin" (il y a 5 lignes entre la ligne 31 et la ligne 36 et 5 ce n'est pas "la fin").
    Surtout quand je te dis "concentre-toi sur la valeur de i", il semble donc évident que les instructions qui touchent à cette valeur auront une importance...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    j'ai fais indentation sur ce site et non dans code:blocks;
    donc les lignes ont bougées ici

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sandaff Voir le message
    donc les lignes ont bougées ici
    Super la précision !!! Quand le sage montre la lune, l'imbécile regarde le doigt. Ok elles ont bougé mais elles ont bougé "ensembles", elles ne se sont pas inversées. Donc qu'importe si ton printf() n'est pas ligne 31 mais ligne 1278, l'important c'est que ce n'est pas "à la fin". Parce que si c'est ligne 1278, alors la fin de la boucle c'est ligne 1283 (donc toujours 5 lignes d'écart entre l'affichage et la vraie fin)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    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
     
    void Saisie(struct Etudiant E1[], int *n){
    int i=0;
    printf("donner un numero:\n");
    scanf("%d",&E1[i].num);
    fgetc(stdin);
    while(E1[i].num!=-1){
        printf("donner le nom\n");
        scanf("%s",E1[i].nom);
        printf("\n");
        printf("\n");
        printf("donner le prenom\n");
        scanf("%s",E1[i].prenom);
        printf("\n");
        printf("\n");
        i++;
        printf("donner un numero:\n");
        scanf("%d",&E1[i].num);
        fgetc(stdin);
        printf("\n");
    }
    *n=i;
    }
    Vous avez un exemple de deux structures liées?
    J'ai fais ce cours en 2005, donc je ne ma rappel plus mais je sais que ça existe.

    Merci pour le cas de mon i qui traînait; très embêtant;

  12. #12
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par sandaff Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        ...
        i++;
        printf("donner un numero:\n");
        scanf("%d",&E1[i].num);
        ...
    Du coup tu corriges d'un côté pour casser de l'autre!
    Le numéro doit être stocké au bon indice, ici tu les mets dans l'élément suivant !!

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sandaff Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(E1[i].num!=-1){
        printf("donner le nom\n");
        scanf("%s",E1[i].nom);
        i++;
        printf("donner un numero:\n");
        scanf("%d",&E1[i].num);
    }
    Joli. Tu stockes le nom dans l'élément [0] et le num dans l'élément [1] !!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tant que infini, faire
        saisir num[i]
        si num[i] == -1 alors break
        saisir nom[i]
        saisir prénom[i]
        i++
    fin tq
    Ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tant que infini, faire
        saisir nom[i]
        saisir prénom[i]
        saisir num[i]
        demander continuer O/N => si non alors break
        i++
    fin tq
    Ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    faire
        saisir nom[i]
        saisir prénom[i]
        saisir num[i]
        i++
    tant que num[i-1] != -1
    Bref les possibilités sont assez nombreuses, suffit juste de réfléchir un minimum...

    Citation Envoyé par sandaff Voir le message
    Vous avez un exemple de deux structures liées?
    Que signfie pour toi "deux structures liées"? Liées comment, avec quelle cardinalité?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Du coup tu corriges d'un côté pour casser de l'autre!
    Le numéro doit être stocké au bon indice, ici tu les mets dans l'élément suivant !!
    Mais non pas du tout;
    Le test se fait avant le while et si tout est OK il faut mettre le nom et prénom danas i correspondant à 0;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int i=0;
    printf("donner un numero:\n");
    scanf("%d",&E1[i].num);
    fgetc(stdin);
    while(E1[i].num!=-1){
    Après i passe à 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        i++;
        printf("donner un numero:\n");
        scanf("%d",&E1[i].num);
    on le test avant de saisir le nom et prénom

    Que signfie pour toi "deux structures liées"? Liées comment, avec quelle cardinalité?

    je ne me rappel plus mais on avait fait un petit projet sur les examens à l’époque ou il y avait plusieurs structures; et on l'avait repris avec le C++ avec les classes;

    je pensais qu'avec vous les professionnels on pouvait avoir des petits exemple pratiques;

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sandaff Voir le message
    Mais non pas du tout;
    Le test se fait avant le while et si tout est OK il faut mettre le nom et prénom danas i correspondant à 0;
    Ah oui, effectivement, dalfab et moi n'avions pas vu cette saisie faite avant la boucle.
    Ok ton code "marchotte". Mais voici à quoi il ressemble...
    Nom : prog.jpg
Affichages : 154
Taille : 12,5 Ko

    Citation Envoyé par sandaff Voir le message
    je ne me rappel plus mais on avait fait un petit projet sur les examens à l’époque ou il y avait plusieurs structures; et on l'avait repris avec le C++ avec les classes;
    Ca c'est de la précision!!! T'es trop clair là, suis trop éblouï...

    Citation Envoyé par sandaff Voir le message
    je pensais qu'avec vous les professionnels on pouvait avoir des petits exemple pratiques;
    C'est justement parce que des exemples on en a des centaines qu'on aimerait bien un peu plus de détails sur ce que tu veux...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Sve@r Voir le message


    C'est justement parce que des exemples on en a des centaines qu'on aimerait bien un peu plus de détails sur ce que tu veux...
    je ne l'ai pas vu dans mes paperasses car ça très duré;

    c'est un peu comme deux entités liées par une clé étrangère et comment les initialiser.

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    C'est quoi l'utilité d'avoir une variable de contrôle de l'ensemble des inputs dans chaque entrée ? Ce machin devrait être une simple variable indépendante.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  18. #18
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sandaff Voir le message
    c'est un peu comme deux entités liées par une clé étrangère
    Ah ok: la structure primaire (qui doit récupérer l'info étrangère) récupère un pointeur dessus

    Exemple: personne<->qualité
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
    	char* sigle;
    	char* text;
    } t_qualite;
     
    typedef struct {
    	char* nom;
    	char* prenom;
    	t_qualite* qual;
    } t_personne;

    Citation Envoyé par sandaff Voir le message
    et comment les initialiser.
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    t_qualite qualite[]={
    	{"M.", "Monsieur"},
    	{"Mme", "Madame"},
    	{"Mlle", "Mademoiselle"},
    	{NULL, NULL},
    };
     
    t_personne personne[]={
    	{"Hugo", "Victor", &qualite[0]},
    	{"Sand", "Georges", &qualite[1]},
    	{NULL, NULL, NULL},
    };
     
    for (t_personne* p=personne; p->qual != NULL; p++)
    	printf("%s %s %s\n", p->qual->text, p->nom, p->prenom);

    Après, le C n'est pas des plus adéquats pour recréer une bdd...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ah ok: la structure primaire (qui doit récupérer l'info étrangère) récupère un pointeur dessus

    Exemple: personne<->qualité
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
    	char* sigle;
    	char* text;
    } t_qualite;
     
    typedef struct {
    	char* nom;
    	char* prenom;
    	t_qualite* qual;
    } t_personne;


    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    t_qualite qualite[]={
    	{"M.", "Monsieur"},
    	{"Mme", "Madame"},
    	{"Mlle", "Mademoiselle"},
    	{NULL, NULL},
    };
     
    t_personne personne[]={
    	{"Hugo", "Victor", &qualite[0]},
    	{"Sand", "Georges", &qualite[1]},
    	{NULL, NULL, NULL},
    };
     
    for (t_personne* p=personne; p->qual != NULL; p++)
    	printf("%s %s %s\n", p->qual->text, p->nom, p->prenom);

    Après, le C n'est pas des plus adéquats pour recréer une bdd...
    Merci pour cet exemple;

    ça doit donc afficher:

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Hugo Victor M. Monsieur
    Sand Georges Mme Madame

    et si on veux que ça donne tout simplement:

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Hugo Victor M. 
    Sand Georges Mme

    char* nom; est nouveau pour moi car nous utilisons char nom[30];

    En C++, on remplace typedef struct par Class; par exemple
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Class Personne{
            char* nom;
    	char* prenom;
    	t_qualite* qual;
    Constructeur ici;
    }
    instance
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Personne personne[]={
    	{"Hugo", "Victor", &qualite[0].sigle},
    	{"Sand", "Georges", &qualite[1].sigle},
    	{NULL, NULL, NULL},
    };

  20. #20
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sandaff Voir le message
    ça doit donc afficher:

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Hugo Victor M. Monsieur
    Sand Georges Mme Madame
    Pas "M" ni "Mme" car j'affiche pas le sigle

    Citation Envoyé par sandaff Voir le message
    et si on veux que ça donne tout simplement:

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Hugo Victor M. 
    Sand Georges Mme
    Même réponse mais dans l'autre sens

    Citation Envoyé par sandaff Voir le message
    char* nom; est nouveau pour moi car nous utilisons char nom[30];
    Si on a besoin de modifier le nom, alors effectivement on passe par un tableau. Mais pas dans ce cas donc un pointeur sur une string constante suffit.

    Citation Envoyé par sandaff Voir le message
    En C++, on remplace typedef struct par Class;
    Ben oui mais on n'est pas en C++
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/02/2023, 15h54
  2. erreur File ended while scaning use of \@writefile
    Par Joshn dans le forum Erreurs - Avertissements
    Réponses: 4
    Dernier message: 14/08/2008, 18h08
  3. Réponses: 2
    Dernier message: 07/05/2008, 13h31
  4. [procédure stockée] Erreur dans un while
    Par LE NEINDRE dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 19/06/2007, 16h46
  5. Erreur dans le while
    Par Didier77 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 21/07/2006, 10h20

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