Tableau char

Résolu/Fermé
ld09 Messages postés 9 Date d'inscription dimanche 22 mai 2016 Statut Membre Dernière intervention 31 janvier 2017 - 8 juin 2016 à 20:14
ld09 Messages postés 9 Date d'inscription dimanche 22 mai 2016 Statut Membre Dernière intervention 31 janvier 2017 - 14 juin 2016 à 09:14
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

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
8 juin 2016 à 21:22
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
ld09 Messages postés 9 Date d'inscription dimanche 22 mai 2016 Statut Membre Dernière intervention 31 janvier 2017
9 juin 2016 à 11:15
Bonjour
comment je peux faire pour qu'il m'imprime uniquement les caractères (cad
xxx
xxx
xxx) et non CR?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
9 juin 2016 à 14:30
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
pkpkmépkpk Messages postés 341 Date d'inscription samedi 14 mai 2011 Statut Membre Dernière intervention 14 janvier 2018 52 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
9 juin 2016 à 21:27
&&
et non
||
.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > pkpkmépkpk Messages postés 341 Date d'inscription samedi 14 mai 2011 Statut Membre Dernière intervention 14 janvier 2018
9 juin 2016 à 21:45
Bien vu :-).
0
ld09 Messages postés 9 Date d'inscription dimanche 22 mai 2016 Statut Membre Dernière intervention 31 janvier 2017
14 juin 2016 à 09:14
cela m'as bcp aidé merci!
0
Utilisateur anonyme
8 juin 2016 à 21:26
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