Tableau char

Résolu
Bonjour,
je veux afficher un tableau char(que je saisis avec scanf ) avec printf c'est un tableau 3x3 et quand je l'affiche il manque les 2 dernieres cases (les cases [2][1] et [2])
par exemple si je rentre
xxx
xxx
xxx
cela m'affiche
xxx
xxx
x
voici le code

#include <stdio.h>
#define n 3

int main( )
{
char arr[n][n];

int i,j;

for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%c",&arr[i][j]);
}
}

for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%c",arr[i][j]);
}
}

return 0;
}

Merci beaucoup

2 réponses

  1. Bonjour,
    Tu affiche bien les 9 premiers caractères que tu as tappé c-a-d :
    x x x CR x x x CR x
    La première ligne contient x x x
    La seconde contient CR x x
    La troisème x CR x
    les caractères entrés ont été mémorisées et ont été retranscrits.
    1. Bonjour
      comment je peux faire pour qu'il m'imprime uniquement les caractères (cad
      xxx
      xxx
      xxx) et non CR?
    2. Contributeur
      Bonjour,

      Tu lis des char, donc le \n est rajouté dans le tableau. Tu auras par exemple arr[0][0] = 'c' arr[0][1] qui vaut '\n' si l'utilisateur appuie sur la touche 'c' et valide.
      Il faut donc traiter ce cas.
      Par exemple :
      int c;
      c=getchar();
      if (c!='\n' || c!=EOF) {
           arr[i][j]=c;
      }
      

      à mettre à la place de ton scanf().
    3. cela m'as bcp aidé merci!
  2. int main(void){

    char tab[3][3];

    int i, j;

    for(i = 0; i < 3 ; i++){

    for(j = 0; j < 3 ; j++){
    scanf("%c",&tab[i][j]);
    printf("\nRemplissage [%d,%d] %c",i,j,tab[i][j]);
    }
    }

    for(i = 0; i < 3 ; i++){
    for(j = 0; j < 3 ; j++){
    if(j==0) printf("\n");
    printf("%c ",tab[i][j]);
    }
    }

    return 0 ;
    }


    ça fonctionne si on rempli donne tout le contenu du tableau d'un coup :

    $./ta
    abcdefghi

    Remplissage [0,0] a
    Remplissage [0,1] b
    Remplissage [0,2] c
    Remplissage [1,0] d
    Remplissage [1,1] e
    Remplissage [1,2] f
    Remplissage [2,0] g
    Remplissage [2,1] h
    Remplissage [2,2] i
    a b c
    d e f
    g h i

    Par contre si on donne lettre par lettre le scanf capture le \n dans le buffer je suppose, du coup ça crée des problèmes