Matrice s'affiche sous forme d'une ligne

Résolu/Fermé
Amina - Modifié le 8 déc. 2022 à 17:30
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 8 déc. 2022 à 17:40

Bonjour,

J'essaie d'afficher une matrice en lignes et colones mais elle s'affiche comme une ligne 

Je ne sais pas quoi faire 

Voila le programme :

#include <stdio.h>
#include <stdlib.h>

void main() {
    int TS[3][3];
    int i, j;
    printf("Donner les 9 éléments de tableau\n");
    for (i = 0; i < 3 ;i++){
        for (j = 0; j < 3; j++){
            scanf("%d", &TS[i][j]);
        }
    }
    printf("Votre tableau sous forme matrice est \n");
    for (i = 0; i < 3; i++){
        for (j = 0; j < 3; j++ ){
            printf("%2d", TS[i][j]);
        }
    }
    putchar("\n");
    return 0;
}
A voir également:

3 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
Modifié le 8 déc. 2022 à 17:30

putchar() comme son nom le rappelle s'attend à recevoir un char, tu lui passes une chaîne.

et en mettant le putchar() une ligne avant, tu auras un retour à la ligne après chaque ligne de nombres.

1

Si tu as des nombres de 2 chiffres ou plus, ils seront tous collés.
Remplaces ton format par " %2d" avec un espace avant le %

1
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
8 déc. 2022 à 17:40

Bonjour,

Comme le propose Dalfab #1, Il faut soit utiliser :

putchar('\n')

mais sinon, tu peux aussi écrire :

printf("\n");

Comme il le signale également, tu ne passes à la ligne qu'une seule fois, une fois tout le contenu de la matrice écrit. Or dans ton cas, tu veux passer à la ligne à chaque fois que tu as fini d'écrire une ligne de matrice. Il faut donc ajouter un passage à la ligne à la fin de la première boucle.

Enfin comme le dit également fort justement PIerrot le fou #2, il faut que tes printf actuels prévoient une manière de séparer les valeurs de ta matrice qui figurent sur la même ligne, par exemple en insérant un espace devant ou derrière chaque valeur. Car si ta matrice contient des valeurs qui s'écrivent plus de deux caractères, tu auras des valeurs qui se toucheront.

Dernière remarque, par convention le type de retour de main() n'est pas cohérent avec return 0, donc son type de retour devrait être int.

Une fois toutes ces corrections apportées, on obtient :

#include <stdio.h>
#include <stdlib.h>

int main() {
    int TS[3][3];
    int i, j;
    printf("Donner les 9 éléments de tableau\n");
    for (i = 0; i < 3 ;i++){
        for (j = 0; j < 3; j++){
            scanf("%d", &TS[i][j]);
        }
    }
    printf("Votre tableau sous forme matrice est \n");
    for (i = 0; i < 3; i++){
        for (j = 0; j < 3; j++ ){
            printf("%2d ", TS[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}

Résultat :

(mando@silk) (~) $ gcc toto.c && ./a.out 
Donner les 9 éléments de tableau
11
12
13
21
22
23
31
32
33
Votre tableau sous forme matrice est 
11 12 13 
21 22 23 
31 32 33

Bonne chance

1