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 :

Aléa dans les lettres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 209
    Par défaut Aléa dans les lettres
    Bonjour a vous tous.

    Je me présente, je suis nouveau en C, et j'essaye de m'entrainer j'ai 15 ans et j'habite dans le sud de la France.

    J'aimerais faire une sorte de génerateur de mot de passe, seulement, pour cela, j'ai besoin d'une fonction qui renvoie une lettre au hasard du nom du prenom et de la ville de la personne, mais en 2 fois, ce qui explique que j'ai créer a chaque fois une variable nomun nomdeux etc jusqu'à villedeux.

    Ces variables sont des tableauxs de type char de 2 cases qui contiennent donc 'Une seulle lettre + le \0'.

    Seulement, j'ai un problème lors de l'utilisation de ma fonction qui permet de renvoyer une lettre de nom, voici mon code du main.c

    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 <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include "structure.h"
    #include "prototype.h"
     
    int main()
    {
        srand(time(NULL));
        infos infos;
        int longNom;
        char nomun[2];
        char nomDeux[2];
        int longPrenom;
        char prenom1[2];
        char prenom2[2];
        int longVille;
        char ville1[2];
        char ville2[2];
     
        printf("Quel est votre nom?\n");
        scanf("%s", infos.nom);
     
        printf("\nQuel est votre prenom?\n");
        scanf("%s", infos.prenom);
     
        printf("\nDans quel ville habitez-vous?\n");
        scanf("%s", infos.ville);
     
        printf("\nQuel age avez vous?\n");
        scanf("%d", &infos.age);
     
        printf("\nEtes vous\n\t1. Un garcon.\n\t2. Une fille?\n");
        scanf("%d", &infos.sexe);
     
        printf("\nQuel est votre chiffre porte bonheur?\n");
        scanf("%d", &infos.fetiche);
     
        longNom = strlen(infos.nom);
        longPrenom = strlen(infos.prenom);
        longVille = strlen(infos.ville);
     
        nomun[0] = nomUn(infos.nom, nomun, longNom);
     
        printf("%s", nomun[0]);
     
        return 0;
    }
     
    char nomUn(char nom[], char nom1[], int taille)
    {
        int MIN = 0;
        int MAX;
        MAX = taille;
        int i;
     
        i = (rand() % (MAX - MIN + 1)) + MIN;
     
        nom1[0] = nom[i];
     
        return nom1[0];
    }

    Ainsi que mon fichier structure.

    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
    #ifndef STRUCTURE_H_INCLUDED
    #define STRUCTURE_H_INCLUDED
     
    typedef struct Informations infos;
    struct Informations
    {
        char nom[1000];
        char prenom[1000];
        char ville[10000];
        char sport[1000];
     
        int age;
        int fetiche;
        int sexe;//Garçon = 1, fille = 0
    };
     
    #endif // STRUCTURE_H_INCLUDED
    Merci de votre compréhension

    Cordialement Qnope

    Je l'avais fait en C# donc je l'ai déplacé en C;
    Merci de votre comprehension

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Par défaut
    Citation Envoyé par qnop Voir le message
    Seulement, j'ai un problème lors de l'utilisation de ma fonction qui permet de renvoyer une lettre de nom
    Description du problème svp?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 209
    Par défaut
    Bas mon programme bug, il m'affiche signal d'erreur et il s'éteint au lieu de m'afficher la lettre qu'il est censé renvoyer

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Citation Envoyé par qnop Voir le message
    Bas mon programme bug, il m'affiche signal d'erreur et il s'éteint au lieu de m'afficher la lettre qu'il est censé renvoyer
    A mon avis ton problème vient de ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%s", nomun[0]);
    Tu lui demandes de t'afficher une chaîne de caractères alors que tu lui passes en paramètre un caractère !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%s", nomun);
    reglera je pense ton problème

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 209
    Par défaut
    Merci pour vos réponse.

    Je vais étudier ce que vous m'avez conseillez et je vous direz si c bon.

    Cordialement Qnope

    PSeathMixer, tu as bien compris mon problème^^.

    Mon problème venait effectivement du nomun[0], je me sens bête c'est affreux.^^

    Sinon, peux tu m'expliquer comment fonctionne le rand sur cette ligne?

    Si je comprends bien, rand comme ca fonctionne de cette sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Si min = 0
    Si max = taille
     
    alors
     
    (rand() % (MAX-MIN)) + MIN
    ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    La fonction rand() est simple, elle te renvoie une valeur aléatoire (ou devrais-je dire pseudo-aléatoire ) comprise entre 0 et RAND_MAX.
    Cette dernière valeur est une macro (vois ca comme une constante) définie dans <stdlib.h> il me semble... ou <stdio.h> peut-être, j'ai un doute d'un coup...

    Bref ! RAND_MAX dépend de ton architecture, sur mon PC il vaut 2**16 - 1.
    Mais si tu veux un nombre aléatoire inférieur à une certaine borne, tu vas devoir indiqué à ton compilateur que tu ne veux que le reste de la division euclidienne de l'aléa tiré par ta borne
    (je sais pas si tu arrives à me suivre là .... )

    Regarde ici pour le fonctionnement de la fonction :
    http://www.linux-france.org/article/...n3/rand-3.html
    ou si tu es sur linux, tape dans un terminal

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Citation Envoyé par qnop Voir le message
    Merci pour vos réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Si min = 0
    Si max = taille
     
    alors
     
    (rand() % (MAX-MIN)) + MIN
    ?
    Fonctionnellement c'est la même chose, mais dans ce cas tu fais intervenir des variables temporaires qui ne te serviront à rien puisque "taille" est entré en paramètre.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut

    Si j'ai bien compris ton probème, tu veux faire une fonction qui te renvoie une lettre prise au hasard dans un mot ??!!

    J'ai juste une question: Si tu veux que ta fonction te renvoie un "char" pourquoi utilises-tu un tableau de char ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char nomUn(char nom[], char nom1[], int taille)
    A quoi te sert "char nom1[]" ici ?
    A mon avis le plus simple pour cette fontion est de faire comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char RandomChar(char nom[], int taille)
    {
         return nom[ rand() % taille ];  // choisit un nombre au hasard entre 0 et taille (exclu) et te renvoie le caractère correspondant
    }
    Ceci va te renvoyer un caractère pris au hasard dans la chaine de caractère donnée en entrée.

    Et après pour te créer ton mot de passe tu appelles plusieurs fois cette fonction, avec comme paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    infos.nom
    infos.prenom
    infos. (...)
    Et tu stockes chacun de ces résultats dans un tableau de carctères
    Un exemple simpliste à étoffer serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char MotDePasse[128];   // la taille maximale de ton mot passe, tu la fixes comme tu veux...
    MotDePasse[0] = RandomChar(infos.nom, longNom); // un premier caractère au hasard tiré du nom
    MotDePasse[1] = RandomChar(infos.nom, longNom); // un deuxieme
    MotDePasse[2] = RandomChar(infos.prenom, longPrenom); //un caractere au hasard tiré du prenom
    MotDePasse[3] = RandomChar(infos.prenom, longPrenom); // un deuxieme
     
     // (etc)  la meme chose avec la ville, et/ou d'autres informations
     
    // PS: n'oublie pas le caractère nul à la fin de ton mot de passe '\0'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2002] PUBLIPOSTAGE : Le "°" de "n°" disparaît dans les lettres
    Par bolide7 dans le forum Word
    Réponses: 10
    Dernier message: 03/04/2010, 21h30
  2. Décaler les lettres d'un mot dans l'alphabet
    Par realtux dans le forum Langage
    Réponses: 9
    Dernier message: 16/04/2009, 00h29
  3. Mettre les lettres dans Timage
    Par yann87 dans le forum Composants VCL
    Réponses: 10
    Dernier message: 23/04/2008, 12h13
  4. Réponses: 1
    Dernier message: 20/10/2006, 21h57

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