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 :

Problème dans un code


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Par défaut Problème dans un code
    ce programme il faut trie les personnes selon leur cin
    dans case 2 le programme est bloque si quelqu'un peut m'aide


    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
    #include<conio.h>
    #include<stdio.h>
    FILE *f;
    struct nom
    { char nom,prenom;
    int cin;
    };
    main()
    { int i,drp=0,choix;
     struct nom t[100],aux;
    do
    {
    printf("1\n");
    printf("2");
    scanf("%d",&choix);
    }
    while((choix<1)||(choix>2));
    switch(choix)
    {
             case 1 : {
              f=fopen("c:\\ex$.txt","w+");
              if(f==NULL)
              printf("erreur"); 
              else
              {printf("donner le nom");
              scanf("%s",t[i].nom);
              fprintf(f,"%s\t\t",t[i].nom);
              printf("donner le prenom");
              scanf("%s",t[i].prenom);
              fprintf(f,"%s\t\t",t[i].prenom);
              printf("donner le cin");
              scanf("%d",t[i].cin);
              fprintf(f,"%d\n",t[i].cin);
              }
              fclose(f);
              break;
              }
             case 2 :{
             f=fopen("c:\\ex$.txt","w+");
             if(f==NULL)
             printf("erreur");
             else
             {fscanf(f,"%s",t[i].nom);
             fscanf(f,"%s",t[i].prenom);
             fscanf(f,"%d",t[i].cin);
             do
             {
            for(i=0;i<100;i++)
            if(t[i].cin < t[i+1].cin)
            drp=1;
            aux=t[i];
            t[i]=t[i+1];
            t[i+1]=aux;
             }
             while(drp==1);
             printf("%s\t\t%s\t\t%d",t[i].nom,t[i].prenom,t[i].cin);
             }
             fclose(f);
              break;
              }
     }
    getch();
    }

  2. #2
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    Il ne manquerait pas les accolades du FOR et du IF ?

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Par défaut
    Déjà, dans case 1, le close doit être dans le else : il ne faut pas fermer le fichier si tu ne l'as pas ouvert.

    D'autre part, si tu indentais ton code, tu verrais la structure (et accessoirement on pourrait mieux voir ce que tu as voulu faire et où ajouter des accolades).

    Même remarque pour le close du case 2.

    Mais le problème le plus important il me semble, c'est ta condition de continuation de boucle do while. Si tu passes une fois dans l'instruction dpr = 1, tu rentres dans une boucle infinie puisque dpr n'est affecté qu'à cet endroit là. Tu auras toujours dpr == 1.

    EDIT : Et j'oubliais : tu auras du mal à faire un tri avec une seule boucle ! Tu peux par exemple faire un tri à bulle avec deux boucles imbriquées ; c'est simple à comprendre et à coder.

  4. #4
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    Tu n'as pas besoin de globales dans ton code,
    On écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(void)
    {
    ...
    return 0; /* ou une autre valeur*/
    }

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Par défaut
    En fait, pour juste corriger ton tri (sans l'optimiser), tu dois déplacer l'initialisation de dpr : dans le do... while, avant la boucle for.

    Si tu lui donnes un nom significatif, on comprend mieux ce que tu voulais faire. L'idée, c'est de dire, "est-ce qu'il me reste quelque chose à trier".

    Donc dans le while, tu dis, à priori : c'est trié.

    Dès que tu rencontres des valeurs non triées, tu permutes et tu dis "c'est pas encore trié".

    Si tu parcours tout ton tableau sans avoir eu besoin de permuter, alors c'est trié.

    Bien sûr, il faut revoir l'indentation et les accolades pour que ça fonctionne...

  6. #6
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct nom
    {
        char nom,prenom;
        int cin;
    };
    Deux objets portent le même nom, je ne sais pas si c'est super,

Discussions similaires

  1. Problème dans un code delphi dans C++Builder
    Par gandf dans le forum C++Builder
    Réponses: 8
    Dernier message: 23/03/2007, 23h12
  2. Réponses: 13
    Dernier message: 17/10/2006, 15h35
  3. Problème dans le code?
    Par Arch Enemy dans le forum C
    Réponses: 5
    Dernier message: 15/08/2006, 11h05
  4. [MySQL] Un problème dans le code PHP
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/07/2006, 11h06
  5. Quel est le problème dans ce code ?
    Par Luther13 dans le forum C
    Réponses: 12
    Dernier message: 26/08/2003, 16h09

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