Bonjour à tous,
Je me trouve face à un problème d'insertion d'une chaîne de caractères dans un tableau bi-dimensionnel.
EXPLICATION DU PROBLEME
Je souhaitais réaliser un jeu à base d'une matrice contenant une liste de caractères. Cependant, m'apercevant qu'il était plutôt difficile pour un joueur de s'y retrouver entre les différentes cases quand la matrice atteignait une certaine taille, je décidais d'indiquer le numéro des lignes et colonnes en haut et à gauche.
Comme l'insertion d'éléments différents dans un tableau est impossible en C, j'ai transformé mes entiers en une chaîne de caractères. Problème : seule la première "lettre" est prise en compte (ce qui est en effet normal vu qu'on est dans un tableau de caractères). Cependant, je n'arrive pas à savoir comment faire en sorte d'avoir une chaîne de caractères affichées dans, par exemple, la case t[0][1].
(Le tableau fonctionne si on choisit un chiffre entre 1 et 9)
CODE ACTUEL
LES TENTATIVES DE RESOLUTION EFFECTUEES
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 //Initialisation de la grille dynamique char** initialiser_grille(int* ligne,int* colonne, int* nb) { printf("Choisissez le nombre de lignes :"); scanf("%d", ligne); printf("\nChoisissez le nombre de colonnes :"); scanf("%d", colonne); do { printf("Choisissez le nombre de lettres:"); scanf("%d", nb); } while(*nb<1 || *nb>26); //Creation du pointeur pour créer le tableau dynamique char** t = (char**)malloc((*ligne)*sizeof(char*)); if (t==NULL) { fprintf(stderr,"erreur de malloc"); exit(1); } srand(time(NULL)); int j; int i; //Creation de la première ligne //element corrige for (i=0;i<=(*ligne);i++) { t[i]=(char*)malloc((*ligne)*sizeof(char)); if (t[i]==NULL) { fprintf(stderr,"erreur de malloc ligne "); exit(1); } } //Remplissage de la matrice for(i = 1;i<=(*ligne);i++) { for(j = 1;j<=(*colonne);j++) { t[i][j]=rand()%*nb+'a'; } } for(i = 1;i<=(*ligne);i++) { //Transformation de l'entier en chaîne de caractères char str[ENOUGH]; snprintf(str, sizeof str, "%d", i); t[i][0]=*str; } for(j = 1;j<=(*colonne);j++) { char str[ENOUGH]; snprintf(str, sizeof str, "%d", j); t[0][j]=*str; } t[0][0]=' '; return t; } //Fonction qui affiche le tableau void affiche(int ligne,int colonne, char** t) { //Choix des variables int i; int j; //Regles pour le tableau for (i=0;i<=ligne;i++) { printf ("\n"); for (j=0;j<=colonne;j++) //Affichage du tableau printf("%3c ",t[i][j]); } }
J'ai essayé de trouver une solution et je m'excuse par avance si j'ai mal cherché sur le site et qu'elle se trouve déjà sur le forum. Voici ce que j'ai pu faire :
- Créer un malloc au niveau des colonnes (j'ai pensé qu'en créant un tableau tri-dimensionnel, ceci pourrait marcher). Pas de changement.
- Ajouter une astéristique sur le tableau t (pour signaler qu'il s'agissait d'un tableau de chaîne de caractère). Nombreux avertissements et lettres et chiffres apparaissant bizarrement.
- Utiliser strcpy. Pas de changement.
- Enlever l'astérisque devant le str. Les chiffres apparaissent comme des P.
- Remplacer char par string dans l'énoncé de la première fonction (en désespoir de cause). Ca n'a évidemment pas marché.
S'il vous plaît, serait-il possible de savoir si j'ai mal implémenté une solution, si elles sont incomplètes ou même si aucune ne correspond ?
Merci par avance pour votre aide et bonne journée à tous !
Partager