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 :

valeurs dans un fichier texte


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 13
    Points
    13
    Par défaut valeurs dans un fichier texte
    bonsoir ,je veux faire un tri par ordre décroissant a partir d'un fichier qui contient des valeurs(lecture),ces valeurs seront trié dans un autre fichier(en ecriture).
    voila mon code je ne sais pas ou est l'erreur,ces valeur s’écrit dans le nouveau fichier mais pas avec l'ordre décroissant.

    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
    88
    89
    90
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    int main()
    {
     
      char FICH_A[30], FICH_FUS[30];
      FILE *FA,*FFUS;
      void tri(int* TABA,int N);
    int changer_pos(int *tabl1, int *tabl2);
     
     
     
     int TABA[100],TFUS[200];
      int LA,N,I ; 
    do
        {
     
         FA = fopen("D:\\tester.txt", "r");
         if (!FA) 
             printf("\aERREUR: Impossible d'ouvrir "
                    "le fichier: ");
        }
      while (!FA);
     
      for (LA=0; !feof(FA); LA++)
           fscanf(FA,"%d\n", &N);
            while (!feof(FA))
         putchar(fgetc(FA));
     
     
     
      fclose(FA);
     
     
      FA = fopen("D:\\tester.txt", "r");
     
      for (I=0; I<N; I++)
           fscanf(FA,"%d\n", TABA+I);
     
      fclose(FA);
     
    do
        {
     
     
      FFUS = fopen("D:\\tester3.txt", "w");
     
         if (!FFUS) 
             printf("\aERREUR: Impossible d'ouvrir "
                    "le fichier: %s.\n", FICH_FUS);
        }
      while (!FFUS);
     
      for (I=0; I<LA; I++)
           fprintf(FFUS,"%d\n", *(TABA+I));
            for (I=0; I<LA; I++)
           printf("%d\n", *(TABA+I));
     
     
      fclose(FFUS);
      getch();
       return 0;
    }
    void tri(int* TABA,int N)
    {
        int i, _i;
        for(_i=0;_i<N;++_i)
        {
            for(i=0;i<N-1;i++)
            {
                if(TABA[i] > TABA[i+1])
                {
                int  changer_pos(int *tabl1, int *tabl2);
                printf ("%d",&TABA[i]);
                }
            }
        }
    }
     
     
     
    int changer_pos(int *tabl1, int *tabl2)
    {
        int inter = 0;
     
        inter = *tabl1;
        *tabl1 = *tabl2;
        *tabl2 = inter;
    }
    merci d'avance.

  2. #2
    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
    Ce code est vraiment mal fichu

    1- indentation et présentation déficientes

    2- mauvais choix d'identificateurs (ex : i et _i)

    3- déclarations des prototypes dans les fonctions.
    Notamment dans tri() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                if(TABA[i] > TABA[i+1])
                {
                int  changer_pos(int *tabl1, int *tabl2);
                printf ("%d",&TABA[i]);
                }
    La ligne en rouge n'est pas un appel de fonction mais une déclaration de prototype.
    Le printf() utilise un %d pour l'affichage d'une adresse

    4- changer_pos() déclare retourner un int et ne retourne rien
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 479
    Points : 831
    Points
    831
    Par défaut
    Bonjour,

    j'ai passé ce bout de code dans un outil d'analyse de qualité du code (QAC pour ne pas le citer), et j'obtiens ceci.

    Déclarations non utilisées:
    6: char FICH_A[30]
    8: void tri(int* TABA,int N);
    9: int changer_pos(int *tabl1, int *tabl2);
    13: TFUS[200];
    73: int changer_pos(int *tabl1, int *tabl2);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      74:              printf ("%d",&TABA[i]);
                       ^
    Msg(7:0179) [U] Argument type does not match conversion specifier number 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg(7:0744) [U] 'changer_pos()' has been declared with a non void result type but ends with an implicit 'return ;' statement.
    MISRA Rule 83
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     37:    for (I=0; I<N; I++)
                         ^
    Msg(4:3353) The variable 'N' is possibly unset at this point.
    Si il n'y rien à lire, N ne sera pas assigné et pourras valoir n'importe quoi.


    J'ai vu aussi que le test d'ouverture des fichiers est inclu dans une boucle while. Si cela se passe mal, il y a de fortes chances que cela se passe mal aussi le coup d'après et ainsi de suite eternellement. C'est une boucle sans fin.

    Et pour finir, evite les variables du type _I à coté d'un I , N, ... Soit plus explicite sur les nom pour la compréhension par un autre relecteur.

    Cordialement
    Page sur Developpez : http://pbriand.developpez.com

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/05/2008, 10h34
  2. Réponses: 0
    Dernier message: 25/02/2008, 14h23
  3. Récuperer une valeur dans un fichier texte
    Par sucrepop dans le forum Langage
    Réponses: 6
    Dernier message: 05/06/2007, 15h01
  4. Lecture de valeurs dans un fichier texte (txt)
    Par zerbault dans le forum Fortran
    Réponses: 2
    Dernier message: 22/01/2007, 10h29
  5. recuperer valeur dans un fichier texte
    Par darksnake dans le forum VBScript
    Réponses: 6
    Dernier message: 15/09/2006, 20h16

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