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. 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
    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!