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 :

Entrer une grille dans un tableau de char


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 24
    Points
    24
    Par défaut Entrer une grille dans un tableau de char
    Bonjour ,

    mon probleme est assez simple mais ca fait longtemps que je tourne en rond donc un petit coup de pouce serait le bienvenue

    Pour un programme je dois travailler sur un "labyrinthe" (fait de . pour les cases vide et de X pour les murs) il sera rentrer par l'utilisateur sous cette forme :
    ...X
    ....
    XX..
    XXX.

    mais lorsque je le rentre mon programme me retourne ca :

    XX.
    .
    ..
    ..
    .

    voila le code :
    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
     
      int z , i ;
      char lab[500][500]; 
     
      for ( i = 0 ; i < 4 ; i++ )	
    	{
    		for ( z = 0 ; z < 4 ; z++)
    		scanf("%c" , &lab[i][z]);
    	} 
    	 for ( i = 0 ; i < 4 ; i++ )	
    	{
    		printf("\n");
    		for ( z = 0 ; z < 4 ; z++)
    			printf("%c" , lab[i][z] );
    	}
    je comprends pas pq il ne saute pas des lignes tout les 4 caracteres je commence a en avoir marre je suis sur que c'est tout bete ...

    Merci d'avance a ceux qui tenteront de m'aider

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    En fait, le problème est que lorsque tu entres un caractère et que tu tapes sur la touche ENTRéE, ça te compte pour deux caractères, c'est-à-dire : le caractère tapé puis '\n'. Donc, le premier appel de "scanf" va te saisir ton caractère, et le second appel va saisir la valeur '\n'. Donc, ça va foirer une fois sur deux.
    Pour régler le problème, il faut donc purger le buffer de stdin après chaque saisie de caractère. Tu peux par exemple placer un "getchar()" après ton "scanf".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for ( i = 0 ; i < 4 ; i++ )	
    {
        for ( z = 0 ; z < 4 ; z++)
        {
            scanf("%c" , &lab[i][z]);
            getchar();
        }
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Merci de ta reponse !
    le getchar() resoud effectivement le probleme mais il m'arrive un truc bizarre : je vous avais posté que la partie qui poser probleme mais lorsque je modifie le code dans mon rpgramme general j'ai tjs un probleme il me renvoi pas grille complete

    bon je vous poste le code corriger qui marche :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
      int z , i ;
      char lab[500][500]; 
     
     
      for ( i = 0 ; i < 4 ; i++ )	
    	{
     
    		for ( z = 0 ; z < 4 ; z++)
    		{
    		scanf("%c" , &lab[i][z]);
     
    	}
    	getchar(); 
    	}
    	 for ( i = 0 ; i < 4 ; i++ )	
    	{
    		printf("\n");
    		for ( z = 0 ; z < 4 ; z++)
    			printf("%c" , lab[i][z] );
     
    }
    	}
    et la code de mon programme complet j'ai un probleme d'affichage dans la main et dans fonction tty:

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int tty(int H, int L, int Yt, int Xt, int Yg, int Xg, char lab[L][H])
    {
     int mvt[500][500];
     int ppX[500][500];
     int ppY[500][500];
     int i , z , x , y , cpt ;
     
     //remplissage de mvt par des 1
     
    for ( z = 0 ; z < H ; z++ )	
    	{
    	for ( i = 0 ; i < L ; i++)
    	mvt[i][z] = 1;
     
    	}
     for ( z = 0 ; z < H ; z++ )	// je tente un affiche ici aussi pour etre sur que tout est bien passé
    	{
    	for ( i = 0 ; i < L ; i++)
    	printf("%c" , lab[i][z] );
     
    printf("\n");
    }
    for (cpt= 0 , i = Xt , z = Yt ; (i != Xg && z != Yg ) || cpt < H*L*4  ; cpt++ )
    {
    x = i;
    y = z ;
    if (lab[i+1][z] == '.')
    	{
    	printf ("mvt 1 %i", mvt[i+1][z] %3);
    	 if ((mvt[i+1][z] %3) != 0)
    		{ mvt[i][z] = mvt[i][z] * 2 ;
    		ppX[i+1][z] = i ;
    		ppY[i+1][z] = z ;
    		i++;
    		}
    	}	
    else if (lab[i-1][z] == '.')
    	{ 
    		printf ("mvt 2 %i", mvt[i-1][z] %2);
    	if ((mvt[i-1][z] %2) != 0)
    		{ mvt[i][z] = mvt[i][z] * 3 ;
    		ppX[i-1][z] = i ;
    		ppY[i-1][z] = z ;
    		i--; }
    	}
    else if (lab[i][z+1] == '.')
    	{
    	printf ("mvt 3 %i", mvt[i][z+1] %7);
    	 if ((mvt[i][z+1] %7) != 0)
    		{ mvt[i][z] = mvt[i][z] * 5 ;
    		ppX[i][z+1] = i ;
    		ppY[i][z+1] = z ;
    		z++;}
    	}	
    else if (lab[i][z-1] == '.')
    	{ 
    	if ((mvt[i][z-1] %5) != 0)
    		{ mvt[i][z] = mvt[i][z] * 7 ;
    		ppX[i][z-1] = i ;
    		ppY[i][z-1] = z ;
    		z--;}
    	}
     
    //si aucun mvt effectuer revenir a la case precedente
    if ( x == i && y == z)
    	{
    	i= ppX[i][z];
    	z= ppY[i][z];
    	printf("reviens sur la case %i %i", i, z);
    	}
     
    }
    if (cpt != H*L*4 )
    	printf("1");
    else printf ("0");
     
    }
     
     
    int main(void)
    {
      int z , i ;
      int H;
      int L;
      int Yt;
      int Xt;
      int Yg;
      int Xg;
      char lab[500][500]; 
     
      scanf("%i", &H);
      scanf("%i", &L);
      scanf("%i", &Yt);
      scanf("%i", &Xt);
      scanf("%i", &Yg);
      scanf("%i", &Xg);
     
      for ( i = 0 ; i < L ; i++ )
    	{
     
    		for ( z = 0 ; z < H ; z++)
    		{
    		scanf("%c" , &lab[i][z]);
     
    	}
    		getchar();
    	}
     for ( i = 0 ; i < L ; i++ )	
    	{
    	printf("\n");
    	for ( z = 0 ; z < H ; z++)
    	printf("%c" , lab[i][z] );
     
     
    }
     
     
      tty(H, H, Yt, Xt, Yg, Xg, lab);
     
      return 0;
    }
    voila voila ca m'embête de bloquer la dessus alors que toutes la difficulté est sur le raisonnement plutot que sur la syntaxe ...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Personne n'a d'idée ?
    même pour le problème de la fonction main ? c'est un copier coller de celle de dessus mais ca me renvois pas la meme chose ... le problème viens surement des scanf qui le précède ... mais pourquoi ca ressemble encore moins a quelque chose dans ma fonction tty ?

    bref je suis un peu perdu ... si quelqu'un pouvais me donner un coup de main ca serait cool

    Merci d'avance

Discussions similaires

  1. Stocker une string dans un tableau de char à deux dimensions
    Par faitor1 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/03/2014, 02h12
  2. Intégrer une vaiable float dans un tableau de char
    Par NoritakaRomain dans le forum C
    Réponses: 2
    Dernier message: 14/05/2007, 15h19
  3. Réponses: 21
    Dernier message: 28/02/2006, 15h23
  4. probleme bizarre de hauteur auto d'une ligne dans un tableau
    Par zax-tfh dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/01/2005, 23h34
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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