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 :

listes chaînées/fichiers je bloque


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut listes chaînées/fichiers je bloque
    je n'arrive pas à faire les fonctions suivantes car je ne sais pas utiliser les fichiers j'ai besoins d'aide :

    creerListe( File *flux, liste *l) qui crée une liste chaînée d'entiers non nuls en insérant successivement les entiers différents lus dans un fichier à partir de la liste chaînée vide
    Liste CreeListeTriee(File *flux, Liste *L) qui crée une liste chaînée triée d'entiers nons nuls en insérant successivement les entiers différents lus dans un fichier à partir de la liste chaînée vide.Les entiers sont triés en ordre croissant.
    et voici la structure
    typedef struct cellule{
    int valeur;
    struct cellule * suivant;
    }Cellule;
    type def Cellule *Liste[/quote]

  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 Re: listes chaînées/fichiers je bloque
    Citation Envoyé par ghislain118
    je n'arrive pas à faire les fonctions suivantes car je ne sais pas utiliser les fichiers j'ai besoins d'aide :
    <...>
    Tu as oublié de poster le code avec lequel tu as des problèmes...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Par défaut
    Ta question portant sur les fichiers a la base voici quelques elements de reponse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      char *mem = (char *)malloc(1024);
      int length;
      FILE *input_file
      if ((input_file = fopen("input_file", "w")) == NULL)
               fprintf(stderr, "Cannot open %s\n", "output_file");
      }
     
       while((length = fread(mem,1,SIZE,input_file)) != 0) {
         CREE TA LISTE AVEC LES ELEMENTS LUS DANS mem;
      }
      fclose(output_file);
    }\
    Stef

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    oui mais comment faire pour lire les bon élément par exemple g ça ds mon fichier

    AFR001-D-1146------;
    AJJ002-A-----10-05;

    les 6 premier c ds un chart tab[6]; ap c un char ap un char tab[4] ap c des int

  5. #5
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par ghislain118
    oui mais comment faire pour lire les bon élément par exemple g ça ds mon fichier

    AFR001-D-1146------;
    AJJ002-A-----10-05;

    les 6 premier c ds un chart tab[6]; ap c un char ap un char tab[4] ap c des int
    Grrr.

    Citation Envoyé par regles du forum
    Bien rédiger
    Veillez à bien rédiger votre post, en français correct, c'est-à-dire sans trop de fautes d'orthographe et surtout pas en langage SMS !
    Utilisez impérativement la balise [ code ] qui permet de mettre en valeur le code.


    Ca, c'est fait.

    Ensuite, pour ton probleme :

    On te demande de faire quoi precisement ?
    Parce que un caractere, c'est un entier (enfin pas tout a fait mais bon...) donc tu peux faire une liste chainee d'entiers sans faire de tests precis sur la valeur de ce que tu viens de lire. Un char vaut entre 0 et 255.

    Sinon c'est qu'on te demande de creer une liste avec les valeurs numeriques de ce que tu lis.

    Dans le premier cas ca devrait ressembler a ca (tres simplifie et pas securise (manque les tests de valeurs de retour)):

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    struct		list
    {
      int		i;
      struct list	*next;
    };
     
    void		add_int_to_list(struct list *my_list, int to_add);
     
    void		extract_int_from_file(FILE *fd, struct list *my_list)
    {
      char		c[1];
     
      while (fread(c, sizeof(*c), 1, fd))
        add_int_to_list(my_list, *c);
      return ;
    }
     
    int		main(int argc, char **argv)
    {
      FILE		*fd;
      struct list	*my_list;
     
      if (argc != 2)
        {
          printf("usage: ./my_prog file\n");
          exit(0);
        }
      fd = fopen(argv[1], "r");
      extract_int_from_file(fd, my_list);
      return (0);
    }
    Sinon tu fais un test sur ce que tu viens de lire.

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Un char vaut entre 0 et 255.
    C'est faux, un char a une valeur entre -128 et 127...

    Un unsigned char peut aller de 0 à 255...

    A ce que je sache, les compilateurs C mettent par défaut les variables comme étant signées... Est-ce la norme?

    Jc

  7. #7
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par fearyourself
    Un char vaut entre 0 et 255.
    C'est faux, un char a une valeur entre -128 et 127...

    Un unsigned char peut aller de 0 à 255...

    A ce que je sache, les compilateurs C mettent par défaut les variables comme étant signées... Est-ce la norme?

    Jc
    Exact. Autant pour moi.
    Il faut specifier unsigned char pour travailler sur du positif.

    Mais en lisant dans un fichier texte on ne devrait pas trouver de valeur nagatives. Si ?

  8. #8
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Mais en lisant dans un fichier texte on ne devrait pas trouver de valeur nagatives. Si ?
    Si, les valeurs négatives sont en fait les valeurs de 128 à 255 et font partie de la table étendue mais qui n'est pas dans la norme. C'est les caractères spéciaux qui ont été ajouté plus tard et il existe différentes variantes...

    Par exemple, nos accents à é ù ä ö...

    Jc

    PS: voir un topic précédent http://www.developpez.net/forums/viewtopic.php?t=428003

  9. #9
    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 fearyourself
    Un char vaut entre 0 et 255.
    Non, ça dépend de l'implémentation
    C'est faux, un char a une valeur entre -128 et 127...
    Non, ça dépend de l'implémentation
    Un unsigned char peut aller de 0 à 255...
    Oui.
    A ce que je sache, les compilateurs C mettent par défaut les variables comme étant signées... Est-ce la norme?
    Non, ça dépend de l'implémentation

    Il y a trois sorte de char :
    • char (aka plain char) qui peut être signé ou non selon l'implémentation
    • signed char qui est signé (plage minimale garantie de -127 à 127)
    • unsigned char qui est non signé (plage minimale garantie de 0 à 255)

  10. #10
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Il y a trois sorte de char :
    • char (aka plain char) qui peut être signé ou non selon l'implémentation
    • signed char qui est signé (plage minimale garantie de -127 à 127)
    • unsigned char qui est non signé (plage minimale garantie de 0 à 255)
    Si je comprend bien, des qu'on veut travailler en dehors de la table ASCII non etendue il faut preciser si les char sont signes ou pas ?

  11. #11
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Pas vraiment,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
     
    int main()
    {
            int i;
            signed char a= (char) (-11);
            unsigned char b = 245;
     
            printf("%c %c\n",a,b);
     
            return 0;
    }
    Affichera la même chose... on ne sait juste pas ce que cette même chose sera...

    Jc

  12. #12
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par fearyourself
    Pas vraiment,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
     
    int main()
    {
            int i;
            signed char a= (char) (-11);
            unsigned char b = 245;
     
            printf("%c %c\n",a,b);
     
            return 0;
    }
    Affichera la même chose... on ne sait juste pas ce que cette même chose sera...

    Jc
    Non ca n'affichera pas obligatoirement la meme chose, ca depends de la taille effective d'un char (1 octet est le minimum garantie, rien n'interdit a une implementation de proposer une taille plus importante) et de la facon dont sont representer les nombres negatif (complement a 1, complement a 2, etc...).

  13. #13
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    ca depends de la taille effective d'un char (1 octet est le minimum garantie, rien n'interdit a une implementation de proposer une taille plus importante) et de la facon dont sont representer les nombres negatif (complement a 1, complement a 2, etc...)
    Existe-t-il vraiment des architectures qui utilisent plus d'un octet pour le caractère?

    Y-a-t-il vraiment une architecture qui ne code pas les entiers en mettant le bit de poids fort à 1?

    En fait, je suppose que oui...

    Jc

  14. #14
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par fearyourself
    ca depends de la taille effective d'un char (1 octet est le minimum garantie, rien n'interdit a une implementation de proposer une taille plus importante) et de la facon dont sont representer les nombres negatif (complement a 1, complement a 2, etc...)
    Existe-t-il vraiment des architectures qui utilisent plus d'un octet pour le caractère?

    Y-a-t-il vraiment une architecture qui ne code pas les entiers en mettant le bit de poids fort à 1?

    En fait, je suppose que oui...

    Jc
    Et oui... Les systèmes exotiques, ça existe
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  15. #15
    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 fearyourself
    Existe-t-il vraiment des architectures qui utilisent plus d'un octet pour le caractère?
    Oui, bien sûr, à commencer par les DSP les plus populaires :
    • Freescale[1] M56156
    • Texas Instrument TMS320C54


    et je ne parle pas des PDP11 et autres Unisys...

    Bref, il n'y a pas que les PC dans la vie réelle...
    ----------------------------------------
    [1] Ex-Motorola

Discussions similaires

  1. Sauvegarde de listes chaînées dans un fichier
    Par wahiba02 dans le forum Pascal
    Réponses: 13
    Dernier message: 31/12/2008, 20h03
  2. Réponses: 3
    Dernier message: 25/10/2007, 21h57
  3. Réponses: 3
    Dernier message: 16/10/2007, 13h50
  4. Problème listes chaînées et fichier texte
    Par khayyam dans le forum Pascal
    Réponses: 2
    Dernier message: 24/01/2007, 20h11
  5. Listes chaînées et fichiers binaires
    Par asgardia dans le forum C
    Réponses: 3
    Dernier message: 26/11/2006, 16h29

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