Tableau char

Résolu
ld09 Messages postés 9 Statut Membre -  
ld09 Messages postés 9 Statut Membre -
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. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    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.
    0
    1. ld09 Messages postés 9 Statut Membre
       
      Bonjour
      comment je peux faire pour qu'il m'imprime uniquement les caractères (cad
      xxx
      xxx
      xxx) et non CR?
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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().
      0
      1. Utilisateur anonyme > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        &&
        et non
        ||
        .
        0
      2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Utilisateur anonyme
         
        Bien vu :-).
        0
    3. ld09 Messages postés 9 Statut Membre
       
      cela m'as bcp aidé merci!
      0
  2. Utilisateur anonyme
     
    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
    0