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 :

Remplacer un caractère dans une chaine


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 49
    Points : 41
    Points
    41
    Par défaut Remplacer un caractère dans une chaine
    Bonsoir, j'ai un problème avec mon code qui produit une erreur lors du lancement.
    Voilà le code complet:
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    char proposer_lettre(char*, char*);
    int mot_trouve(char*, char*);
    char lire_caractere() ;
     
    int main()
    {
        int coup_restant = 10;
        char *mot_secret = "ROUGE", *mot_decouvert = "*****";
     
    	printf("Bienvenue au jeu du pendu!\n");
     
    	while(coup_restant > 0)
    	{
            printf("\nIl vous reste : %d coup restant\n", coup_restant);
            printf("Quel est le mot secret ? %s\n", mot_decouvert);
     
            *mot_decouvert = proposer_lettre(mot_secret, mot_decouvert);
     
            if(mot_trouve(mot_secret, mot_decouvert) == 1)
                printf("\nBravo! Vous avez trouvé le mot!");
            else
                coup_restant--;
    	}
     
    	return 0;
    }
     
    char proposer_lettre(char *mot_secret, char *mot_decouvert)
    {
        char lettre;
        int i;
     
        printf("Proposez une lettre : ");
        lettre = lire_caractere();
     
        for(i=0 ; mot_secret[i]!='\0' ; i++)
        {
            if(lettre == mot_secret[i])
            {
                mot_decouvert[i] = lettre;
            }
        }
     
        return *mot_decouvert;
    }
     
    int mot_trouve(char *mot_secret, char *mot_decouvert)
    {
        int i;
     
        for(i=0 ; mot_secret[i]!='\0' ; i++)
        {
            if(mot_secret[i] != mot_decouvert[i])
                return 0;
        }
        return 1;
    }
     
    char lire_caractere()
    {
        char caractere = 0;
     
        caractere = getchar(); // On lit le premier caractère
        caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
     
        // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
        while (getchar() != '\n') ;
     
        return caractere; // On retourne le premier caractère qu'on a lu
     
    }
    il semblerai que ce soit un problème à cette ligne là dans proposer_lettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mot_decouvert[i] = lettre;
    je ne comprend pas pourquoi çà ne marche pas, est ce comme çà qu'on fait?

    merci de votre aide.

  2. #2
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par Mujin
    il semblerai que ce soit un problème à cette ligne là dans proposer_lettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mot_decouvert[i] = lettre;
    Oui en effet tu modifies une chaîne littérale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *mot_secret = "ROUGE", *mot_decouvert = "*****";
    je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define LONGUEUR_MAX 128
    char mot_decouvert[LONGEUR_MAX] = "*****";
    un conseil prend l'habitude d'ajouter un const lors de la déclaration de tes pointeurs vers des espaces mémoires non modifiable comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char const *mot_secret = "ROUGE";
    sinon toupper() est déclarée dans <ctype.h>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 49
    Points : 41
    Points
    41
    Par défaut
    c'est génial çà fonctionne merci, j'ai compris mon erreur.

    sinon toupper fonctionne sans <ctype.h> pourtant...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Mujin Voir le message
    sinon toupper fonctionne sans <ctype.h> pourtant...
    Le niveau de warning du compilateur est maximal dans ton projet ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 49
    Points : 41
    Points
    41
    Par défaut
    Comment on fait pour voir çà? Je suis sous code blocks et il me marque :
    0 erreur, 0 warning, c'est pas normal c'est çà?

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

Discussions similaires

  1. Remplacement de caractères dans une chaines
    Par jeanmi681 dans le forum Langage
    Réponses: 9
    Dernier message: 18/06/2009, 16h06
  2. Remplacer des caractères dans une chaine et enlever certains
    Par Lucas Panny dans le forum SL & STL
    Réponses: 6
    Dernier message: 12/01/2009, 14h26
  3. Réponses: 4
    Dernier message: 14/11/2008, 21h00
  4. Remplacer des caractères dans une chaine interbase 7.5
    Par zaydoun_391 dans le forum InterBase
    Réponses: 1
    Dernier message: 15/04/2008, 16h57
  5. Réponses: 4
    Dernier message: 29/08/2006, 17h44

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