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 :

Remplir contenue d'une structure aléatoirement


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 36
    Par défaut Remplir contenue d'une structure aléatoirement
    Bonjour j'ai une structure pers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct per{
      int id; /* On prendra l’indice du tableau, par exemple */
      char *nom;
      char age;
      char telephone[10];
    };
    et je dois faire ca:
    Définissez un tableau statique de struct per contenant un certain nombre d’entrées choisies aléatoirement, ainsi qu’une variable statique donnant le nombre d’entrées dans le tableau.

    Mais je ne comprend pas cette partie "un tableau statique de struct per contenant un certain nombre d’entrées choisies aléatoirement" comment remplir le contenue aléatoirement.

    Merci

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par delisiouz Voir le message
    comment remplir le contenue aléatoirement.
    Bonjour

    Tu as plusieurs possibilités. Si t'es sur un Unix/Linux, tu peux aller lire le fichier /dev/random. Ce n'est pas un vrai fichier, c'est un point d'entrée vers le noyau mais on peut le lire via read/fread et la lecture récuoère des octets aléatoires.
    Tu peux aussi utiliser la fonction random() qui te retourne un long aléatoire compris entre 0 et RAND_MAX. Mais il te faut d'abord initialiser le générateur de nombres aléatoires via la fonction srandom(). Et comme cette initialisation a besoin d'une graine différente (une même graine donnera la même séquence aléatoire), perso j'utilise comme graine le temps machine associé à mon pid de cette façon: srandom(time(NULL) ^ getpid()) (getpid() est une primitive Unix/Linux que tu peux shunter si t'es sous zindow).
    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
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 36
    Par défaut
    Je ne comprend toujours pas comment je peut le remplir etant donné qu'on a aussi des char pour l'age, le nom et le telephone.
    Sachant que a la fin je devrai:
    le but est de manier des fichiers, et d’apprendre une méthode de sauvegarde de données, en utilisant un format de TLV (type, length, value). Un tel format permet d’encoder des données binaires, de manière modulaire et extensible.

    Je ne sais pas si cette precision aide.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Une structure (ou même une simple variable) c'est avant tout une suite d'octets. Si j'écris par exemple int toto alors "toto" fait (à priori) 4 octets. Si ensuite j'écris memcpy((char*)&toto + 2, 0x12, 1) ça va placer l'octet de valeur "0x12" dans le 3° octet de toto. Ensuite, que l'octet soit 0x12 en dur ou bien un octet aléatoire issu de random() importe peu dans l'opération.
    Et pour le "à priori", on s'en fout car tu as à ta disposition l'opérateur sizeof qui te donne la taille d'une variable en octets. Donc une boucle et ça devrait le faire...
    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
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 36
    Par défaut
    Je ne sais pas si j'ai bien compris mais on va ca
    Donc je fait ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    srand(time(NULL));
      struct per *p;
      p=(struct per*)malloc(sizeof(struct per));
      int n=rand()%(200-0+1)+0;
      p->nom=(char*)malloc(sizeof(n));
      memcpy((char*)&n+2,0x12,1);
    Je ne sais pas trop si c'est bien ca ce qu'il faut faire au depart je l'ai juste fait pour le char *nom pour savoir si je suis dans le bonne direction pour faire ensuite l'age et le telephone.

    Merci

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par delisiouz Voir le message
    Je ne sais pas trop si c'est bien ca ce qu'il faut faire au depart je l'ai juste fait pour le char *nom pour savoir si je suis dans le bonne direction pour faire ensuite l'age et le telephone.
    Oui c'est ça. Mais pourquoi passer par les membres de p ??? Autant remplir directement p, p+1, p+2, p+3, ... Et attention, 0x12 n'était qu'un exemple de remplissage d'un octet (il me fallait bien trouver une valeur pour l'exemple donc j'ai choisi 0x12 comme j'aurais pu prendre 0xaa) mais toi, tu dois utiliser des nombres choisis aléatoirement...

    Accessoirement, faire un malloc pour 1 c'est idiot. Tu écrirais directement struct pers p ça irait plus vite. Idem pour le nom qui pourrait être un tableau de n caractères en dur plutôt qu'alloué à chaque fois. D'ailleurs je ne pige pas trop le nom=malloc(sizeof(n)). Je pense que tu voulais plutôt faire nom=malloc(n * sizeof(char)) (surtout que n est une valeur aléatoire). Mais là encore, pourquoi le nom devrait avoir une taille aléatoire ??? Remplir une zone d'octets aléatoires ne signifie pas que la zone elle-même doit avoir une taille aléatoire...
    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. Afficher le contenu d'une structure dans une figure
    Par rhedouin dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 25/04/2013, 12h08
  2. Contenu d'une structure C
    Par filoo85 dans le forum C
    Réponses: 6
    Dernier message: 25/11/2011, 11h59
  3. Réponses: 6
    Dernier message: 17/01/2011, 08h43
  4. Réponses: 4
    Dernier message: 17/01/2008, 23h50
  5. Réponses: 2
    Dernier message: 30/11/2007, 13h14

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