Tableau 2D en C++ (Saisie et Impression)
//Variable Description
int H,W;
int map[H][W];
//Input
cin>>W>>H;
for(int i=0; i<H; i++)
{
for (int j=0; j<W; j++)
{
cin>>map[i][j];
}
}
cout<<endl;
//Print
for(int i=0; i<H; i++)
{
for (int j=0; j<W; j++)
{
cout<<map[i][j];
}
}
cout<<endl;
return 0;
`
Mon résultat est:
3 3
1 2 3
4 5 6
7 8 9
789789789
Pourquoi je ne reçois pas tous les numéros dans ma sortie ? Pourquoi juste la dernière ligne?
Vous devez vous connecter pour publier un commentaire.
Vous êtes l'initialisation de la taille de la matrice après la déclaration d'elle!!!
Vous ne pouvez pas utiliser de longueur variable des tableaux en C++. Lire cette réponse plus.
donc, vous devez utiliser un
std::vector
, comme ceci:Vous pourriez le faire avec un tableau, mais vous devez utiliser l'allocation dynamique de mémoire, ce qui vous oblige de désallouer de la mémoire lorsque vous avez terminé. Voici comment il devrait aller:
H
etW
pour tableau d'allocation sur la pile ne sont pas autorisés conformément à la norme. Certains compilateurs de l'appuyer, mais il n'est pas portable. Les tailles des tableaux doit être connu au moment de la compilation. Voir aussi cette question. Il mentionne également été à l'exigence: "Le C++ standard indique que la taille du tableau doit être une expression constante (8.3.4.1)".Votre déclaration
int map[H][W];
entend clairement suffisamment d'espace pour contenir tous les nombres. Mais il ne sait pas de combien d'espace encore (W et H ne sont pas définis à l'endroit où vous déclarezmap
). Donc, il va libérer de l'aléatoire (éventuellement zéro, éventuellement ridiculement élevé) quantité d'espace, en fonction de ce que les emplacements de mémoire occupée par H et W contiennent. Pour allouer de la mémoire dynamiquement, vous aurez besoin de le faire (un) après H et W sont connus, et (b) à l'aide de lanew
mot-clé (le chercher à l'aide d'un terme de recherche comme "allocation dynamique de la mémoire en C++", et pendant que vous y êtes, savoir pourquoi il est aussi important dedelete [] map
lorsque vous avez fini avec elle).