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 sur console


Sujet :

C

  1. #1
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut remplacer un caractère sur console
    Bonjour,
    suite à la création d'un labyrinthe en .txt, je dois changer le M du .txt pour qu'il s'affiche autrement sur ma console.
    Comment puis je faire?
    j'ai essayé en lisant le tableau caractère par caractère mais ça ne marche toujours pas.
    Cordialement,

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Tu peux donner ton code et expliquer ce qui ne marche pas ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    j'ai essayé en lisant le tableau caractère par caractère mais ça ne marche toujours pas.
    Pourtant,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // lecture du tableau caractère par caractère, stocké dans char current, affichage du caractère
    if (current == 'M')
    {
      printf("%c", 'L');
    }
    else
    {
      printf("%c", current);
    }
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 350
    Points
    4 350
    Par défaut
    Utilise la balise code s'il te plaît (comme Bousk), c'est illisible comme ça.

    Edit: et supprime le code passé en commentaire, j'ai cru que c'était du vrai code avant la coloration syntaxique.
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  5. #5
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    En rajoutant votre code il me fait toujours pareil, il rajoute un "L" avant le "M" de mon mur mais ne me le remplace pas..


    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
     
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
         /*FILE* fichier = NULL;
        char chaine[2] = "";
     
        fichier = fopen("labyrinthe.txt", "r");
     
        if (fichier != NULL)
        {
            while (fgetc(chaine, 2, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
            {
                printf("%s", chaine); // On affiche la chaîne qu'on vient de lire
            }
     
            fclose(fichier);
        }*/
        char labyrinthe[15][15];
          FILE* fichier = NULL;
        int caractereActuel = 0;
        int ligne = 0;
        int colonne = 0;
     
        fichier = fopen("labyrinthe.txt", "r");
     
        if (fichier != NULL)
        {
            caractereActuel = fgetc(fichier); // On initialise caractereActuel
     
    	// Boucle de lecture des caractères un à un
     
    	while (caractereActuel != EOF) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
    	{
    	    if (caractereActuel == '\n')
    	    {
    	    //  ligne++;
    	    }
    	    colonne++;
    	    if (colonne==15)
    	    {
    	        colonne = 0;
     
    	    }
    	    labyrinthe [ligne][colonne] = caractereActuel;
    	    printf("%c", caractereActuel); // On affiche le caractère stocké dans caractereActuel
      	    caractereActuel = fgetc(fichier); // On lit le caractère suivant
     
    if (caractereActuel == 'M')
    {
      printf("%c", 'L');
    }
    else
    {
      printf("%c", caractereActuel);
    }
    	}
    	// lecture du tableau caractère par caractère, stocké dans char current, affichage du caractère
     
    fclose(fichier);
        }
     
    int i;
    for(i=0; i<7; i++)
    {
     
        printf ("%c",labyrinthe [0][i] );
    }
     
      system("PAUSE");
      return 0;
    }

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    il ne s'agit pas de "rajouter mon code" au petit bonheur la chance.
    Quand je vois ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    printf("%c", caractereActuel); // On affiche le caractère stocké dans caractereActuel
      	    caractereActuel = fgetc(fichier); // On lit le caractère suivant
     
    if (caractereActuel == 'M')
    {
      printf("%c", 'L');
    }
    else
    {
      printf("%c", caractereActuel);
    }
    Comprends-tu ce que tu écris ? Alors "l'erreur" te sautera aux yeux.
    Tu as même mis un commentaire qui devrait encore plus t'indiquer ton erreur.

    edit: en fait l'erreur est bien plus grave que je ne l'avais remarqué à la première lecture, puisque tu lis 2 caractères.. ce qui ne me semble pas être le but de la boucle initialement.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Ce que j'ai écrit:
    les caractères sont lus un par un.
    S'il rencontre un M il doit affiche un L.

    En effet toutes les lettres s'affichent en double ou rajoute un L avant le M
    Mais je n'arrive pas à comprendre pourquoi.

    Je pensais placer le code printf après avoir lu tous les caractères justement...
    Désolée je suis complètement débutante en C, et je galère vraiment beaucoup sur ce projet.

    Dans mon deuxieme code j'ai enlevé le "else", les lettres ne s'affichent pas en double mais rajoute toujours un L avant le M.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     printf("%c", caractereActuel); // On affiche le caractère stocké dans caractereActuel
      	    caractereActuel = fgetc(fichier); // On lit le caractère suivant
     
    if (caractereActuel == 'M')
    {
      printf("%c", 'L');
    }
     
    	}
    Merci beaucoup en tout cas pour ton aide.

  8. #8
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    c'est bon j'ai compris où était mon erreur.
    Merci!!

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Le printf réalise l'affichage, comme tu le mentionnes en commentaire

    L'idée initiale telle que je l'avais émise était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // lecture du tableau caractère par caractère, stocké dans char current, affichage du caractère
    if (current == 'M')
    {
      printf("%c", 'L');
    }
    else
    {
      printf("%c", current);
    }
    de remplacer l'affichage que tu avais actuellement du caractère (que tu disais lire 1 par 1) par ce code.
    Donc remplacer ton printf par ce test.
    Pas d'ajouter ce test à la suite

    N'hésite pas à montrer ton code final si tu veux que l'on vérifie que tout va bien cette fois
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Voici mon code maintenant. il marche parfaitement.
    Merci encore pour l'aide ! ! !

    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
    int labyrinthe( )
    {
     
       char labyrinthe[15][15];
          FILE* fichier = NULL;
        int caractereActuel = 0;
        int ligne = 0;
        int colonne = 0;
     
        fichier = fopen("labyrinthe.txt", "r");
     
        if (fichier != NULL)
        {
            caractereActuel = fgetc(fichier); // On initialise caractereActuel
     
    	// Boucle de lecture des caractères un à un
     
    	while (caractereActuel != EOF) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
    	{
     
    	    labyrinthe [ligne][colonne] = caractereActuel;
    	  	    if (caractereActuel == 'M')
                {
                  printf("%c", (219));
                }
                else
                {
                  printf("%c", caractereActuel);
                }
      	    caractereActuel = fgetc(fichier); // On lit le caractère suivant
     
    	}
    	// lecture du tableau caractère par caractère, stocké dans char current, affichage du caractère
     printf ("\n");
    fclose(fichier);
        }
     
     
      system("PAUSE");
      return 0;
    }

  11. #11
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Bousk Voir le message

    N'hésite pas à montrer ton code final si tu veux que l'on vérifie que tout va bien cette fois
    voilà mon code final, mais euh... il est pas stocké en mémoire, je ne peux donc rien modifier dessus c'est ça? une petite aide svouplé?

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Oui le code est correct, il fait ce que tu souhaitais en début de thread.
    Mais je ne comprends pas ta question
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #13
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Oui le code est correct, il fait ce que tu souhaitais en début de thread.
    Mais je ne comprends pas ta question

    euh... ce tableau j'aimerai le modifier (y rajouter des objets par exemples, des joueurs, pouvoir changer leur place etc.) et pour cela il paraît que j'ai besoin de stocker mon labyrinthe (donc mon tableau) en mémoire...

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Oui, actuellement tu lis le caractère du fichier et agit selon ce qui est lu.
    Si tu désires le modifier par la suite, il faut enregistrer le contenu du fichier en mémoire.
    Tu as déjà un début puisque tu as un tableau et des index ligne et colonne. Il faut maintenant parcourir et enregistrer dans ce tableau au fur et à mesure de la lecture
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  15. #15
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Oui, actuellement tu lis le caractère du fichier et agit selon ce qui est lu.
    Si tu désires le modifier par la suite, il faut enregistrer le contenu du fichier en mémoire.
    Tu as déjà un début puisque tu as un tableau et des index ligne et colonne. Il faut maintenant parcourir et enregistrer dans ce tableau au fur et à mesure de la lecture

    tout à fait. tu me parlerais en indonésien ça serait pareil bon déjà j'ai modifié ma boucle
    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
    	while (caractereActuel != EOF) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
    	{
    	    if (caractereActuel == 10)
    	       {
                                ligne++;
                                colonne=0;
                                printf("\n");
                }
                else
                {
    	    labyrinthe [ligne][colonne] = caractereActuel;
    	  	    if (caractereActuel == 'M')
                {
                  printf("%c", (219));
                }
                else
                {
                  printf("%c", caractereActuel);
                }
     
      	    colonne++;   //c'était pas au bon endroit 
           }
    mais ensuite pour le parcourir et l'enregistrer... ahem

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ton code est faux.
    Que signifie caractereActuel == 10 ?
    Que ta condition est vraie quand le caractère lu est le 10° dans la table ASCII (sûrement pas ce que tu veux)
    Ce sont ligne et colonne les index du tableau. Et donc leurs valeurs qui définissent s'il faut changer de ligne et/ou colonne.

    Tu as un tableau labyrinthe où tu stockes le caractère actuel. C'est ce tableau, en mémoire, que tu pourras modifier par la suite.

    tu me parlerais en indonésien ça serait pareil
    Non parce que j'en serais incapable
    Blague à part, qu'est-ce que tu ne comprends pas ? Le parcourt du tableau ? la lecture du fichier ?
    Pourtant tu réalises déjà les 2...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  17. #17
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    mon code ne marchait pas si je mettais caractereActuel == \n du coup avec mon tuteur on a mis caractereActuel == 10 et ça fonctionne jusqu'au bout pour la lecture du tableau...

    je voulais le stocker en mémoire pour pouvoir y rajouter des objets plus tard mais oui en le lisant il le stocke forcément donc pas de soucis... erf :/

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Autant pour moi, le 10 semble être le retour à la ligne.
    La comparaison à '\n' ne fonctionne pas ? Je ne saurais l'expliquer.

    En fait, quitte à avoir des tableaux de dimensions fixes, j'aurais plutôt réaliser le test de valeur de ligne ou colonne, afin d'éviter des accès en dehors du tableau pouvant entraîner un crash (ou autre effets indésirables).

    Mais l'essentiel est que l'application fonctionne et que le prof' la valide^^

    Bonne chance pour la suite.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  19. #19
    Membre du Club
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Bousk Voir le message
    quitte à avoir des tableaux de dimensions fixes, j'aurais plutôt réaliser le test de valeur de ligne ou colonne, afin d'éviter des accès en dehors du tableau pouvant entraîner un crash (ou autre effets indésirables).
    je comprends pas ce que tu veux dire par là...

    Mais merci énormément pour l'aide que tu m'as apporté.

    5/5 pour tes explications !

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

Discussions similaires

  1. Remplacement de caractères sur type TEXT
    Par CleeM dans le forum Développement
    Réponses: 1
    Dernier message: 09/08/2011, 10h05
  2. Caractères accentués remplacés par des '?' sur page JSP (Mysql 5)
    Par nicolaseng dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 01/03/2011, 19h50
  3. remplacement de caractère sur plusieurs feuilles
    Par magicfrom dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/05/2008, 09h59
  4. Caractères accentués remplacés par des '?' sur page JSP
    Par nicolaseng dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 25/02/2008, 16h03
  5. [RegEx] Remplacement de caractères sur une page générée en php
    Par _Alain_ dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2007, 13h18

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