Blacksword Posté(e) le 26 janvier 2008 Posté(e) le 26 janvier 2008 Bonsoir, j'essaye actuellement de developper un puissance 4 en mode console pour m'assurer de la maitrise des tableaux, appels de fonctions avec arguments, boucles etc etc, j'y arrive bien excepte une chose: comment initialiser une matrice de [6][7] de char a la valeur " " (espace) en un coup ? En effet, ecrire {{" ", " ", ...}] me semble assez fastidieux, et k'imagine qu'il existe bien une solution alter,ative non ? J'ai essaye char cmatrix[6][7] = {" "} ; mais ca ne donne rien... Et si tous les sites expliquent comment initilaiser une aprtie de la matrice, aucun ,ne dit comment tout initialiser d'un coup. Quelqu'un a-t-il la bonne syntaxe pour cette operation ? Merci d'avance pour vos reponses et bonne soiree PS: j'utilise code:blocks
windu.2b Posté(e) le 26 janvier 2008 Posté(e) le 26 janvier 2008 Avec 2 boucles 'for' imbriquées, ça n'irait pas ? Je te l'écris comme on l'écrirait en Java, à toi d'adapter pour le C++ si besoin est: for( int i = 0; i < tab.length; i ++ ) { for( int j = 0; j < tab[i].length; j ++ ) { tab[i][j] = " "; } }
Blacksword Posté(e) le 26 janvier 2008 Auteur Posté(e) le 26 janvier 2008 Ah ouais, pas con du tout, bien vu Cependant, je me demande s'il n'existe pas de solution plus propre... mais faute de mieux je me servirai de cela, merci beaucoup !
PiFou86 Posté(e) le 27 janvier 2008 Posté(e) le 27 janvier 2008 En c++ on n'a pas accés à la taille des tableaux. De plus il ne faut pas confondre des strings (" ") et des chars (' ') for( int i = 0; i < 6; ++i) for( int j = 0; j < 7; ++j) tab[i][j] = ' ';
theocrite Posté(e) le 27 janvier 2008 Posté(e) le 27 janvier 2008 J'ai essaye char cmatrix[6][7] = {" "} ; mais ca ne donne rien... Le code exact serait plutôt char cmatrix[6][7] = {{" "}} Mais ça ne te remplirait que la première case à " " et tout le reste à 0. Les réponses au dessus sont un peu compliquées... La réponse serait plutôt : memset ((void *)cmatrix, (int)' ', 6*7);
Le Saigneur Sombre Posté(e) le 23 février 2008 Posté(e) le 23 février 2008 memset ((void *)cmatrix, (int)' ', 6*7); Perfect ! C'était ma réponse...
16ar Posté(e) le 25 février 2008 Posté(e) le 25 février 2008 Les réponses au dessus sont un peu compliquées...La réponse serait plutôt : memset ((void *)cmatrix, (int)' ', 6*7); Merde ^^ Je serai pas du genre a penser ce genre de truc Mais dire que les solutions du dessus sont compliquées, je ne trouve pas . Apres, elle sont surement moins performantes je pense, mais plus compliquées, pas vraiment
PiFou86 Posté(e) le 25 février 2008 Posté(e) le 25 février 2008 je rajouterai meme que c'est idiot de montrer un memset (qui est une bidouille mémoire, non générique) plutot que deux boucles imbriquées qui est plus explicite d'un point de vu algorithmique...
lorinc Posté(e) le 26 février 2008 Posté(e) le 26 février 2008 rhaaa, je suis pas d'accord. J'aime beaucoup le memset parce qu'il force a comprendre comment sont mappées les données en mémoire. Pour moi, c'est vital de savoir comment fonctionne la mémoire, surtout en C/C++. Il n'y a rien de plus désastreux que ceux qui programment en gardant une vision "boîte noire" de l'outil qu'ils exploitent.
theocrite Posté(e) le 26 février 2008 Posté(e) le 26 février 2008 je rajouterai meme que c'est idiot de montrer un memset (qui est une bidouille mémoire, non générique) plutot que deux boucles imbriquées qui est plus explicite d'un point de vu algorithmique... Moi je ne suis pas d'accord pour faire deux boucles imbriquées. Je pense qu'on devrait mettre à zéro successivement tous les bits un par un en appelant une routine en assembleur, quitte à faire dans la simplicité.
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.