Se connecter avec
S'enregistrer | Connectez-vous

Debutant en C need help !

Dernière réponse : dans Programmation

Bonjour, je suis débutant en C, j'utilise cygwin pour compiler et executer.
Je cherche a écrire une fonction qui rempli une grille de '.' et l'afficher ensuite (dans le but de créer un puissance 4).
Seulement lorsque je compile avec gcc , la compilation se passe bien, mais l'execution plante après le passage des parametre et me renvoi l'erreur :
"[main] puissance4 4732 _cygtls::handle_exceptions : Error while dumping state (probably corrupted stack)
Segmentation fault (core dumped) "

Lorsque je compile et execute avec Dev C, le programme plante carrement...

Quelqu'un pourrait me dire ou se situe l'erreur car j'ai beau chercher et tester , pas moyen de resoudre.
Voila le code:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <assert.h>
  6. #include <windows.h>
  7.  
  8. // afficher la grille
  9.  
  10. void affiche() {
  11. int i,j,nbC,nbL;
  12. char grille[nbC][nbL];
  13.  
  14.  
  15. for (i=0; i<nbL ; i++) {
  16. for (j=0; i <nbC ; j++) {
  17. printf("%s",&grille[i][j]);
  18. }
  19. }
  20. }
  21.  
  22.  
  23. int main () {
  24.  
  25. // passage des parametres de jeu
  26.  
  27. int choix_mode, commence, nbL, nbC, i, j;
  28. char grille[nbL][nbC];
  29.  
  30. while ( choix_mode != 1 && choix_mode != 2 && commence !=1 && commence !=2) {
  31.  
  32. printf("Quel mode de jeu ? \n");
  33.  
  34. // mode de jeu
  35.  
  36. printf("mode : joueur vs joueur [1] joueur vs ordinateur [2] ?");
  37. scanf("%d", &choix_mode);
  38. if (choix_mode != 1 && choix_mode != 2) {
  39. printf("Les choix doivent etre 1 ou 2 \n");
  40. }
  41. // Qui commence ?
  42.  
  43. printf("Qui commence [1 ou 2] ?");
  44. scanf("%d", &commence);
  45. if (commence != 1 && commence !=2 ) {
  46. printf("Les choix doivent etre 1 ou 2 \n");
  47. }
  48. }
  49.  
  50. // détermination de la taille du tableau et definition du tableau et affichage
  51.  
  52. printf("Quelle est la taille du tableau ?\n");
  53. printf("Nombre de ligne?");
  54. scanf("%d", &nbL);
  55. printf("Nombre de colonne?");
  56. scanf("%d", &nbC);
  57. for (i=0; i<nbL; i++) {
  58. for (j=0; j<nbC; j++) {
  59. grille[i][j]='.' ;
  60. }
  61. }
  62.  
  63. affiche();
  64.  
  65. return 0;
  66.  
  67. }


merci

Autres pages sur : debutant need help

Lassé par la pub ? Créez un compte

Tout est ligne 12 !

Tu declares un tableau avec comme taille 2 variables de valeurs inconnues ;) 

Tu devrais fixer ces 2 valeurs soit en DEFINE soit en static je pense.

Sinon:
  • tes includes lignes 4/5/6 sont inutiles pour le moment
  • ton affiche() n'affichera jamais la grille ... il faut lui passer en paramètre d'une façon ou d'une autre (plutot par pointeur que par reference) ou bien déclarer ta grille en global.

    Le début deviens:

    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <stdlib.h>
    4.  
    5. // afficher la grille
    6.  
    7.  
    8. unsigned short int static nbL = 8, nbC = 8;
    9. char grille[nbC][nbL];
    10.  
    11. void affiche() {
    12. int i,j,nbC,nbL;
    13.  
    14. for (i=0; i<nbL ; i++) {
    15. for (j=0; i <nbC ; j++) {
    16. printf("%s",grille[i][j]);
    17. }
    18. }
    19. }
    20.  
    21. int main () {
    22.  
    23. // passage des parametres de jeu
    24.  
    25. unsigned short int choix_mode, commence, i, j;
    26.  
    27. while ......


    Et hop ça ne crash plus lamentablement :) 

    Sinon plutot que de t'embeter sous cygwin, essaye code::blocks ! :) 
    Expert Programmation

    Ou encore une petite allocation dynamique :o 

    <Prosélytisme>
    Un des gros intérêts de cygwin, c'est de simuler l'environnement UNIX.
    Alors si tu aimes tant Windows, suis les conseils de Boub et installe Code::Black. Sinon, si c'est le côté programmation système UNIX qui t'intéresse, ose t'installer un ptit Linux ;) 
    </Prosélytisme>

    Hello, j'avais lu la réponse et je m'en suis sortie quand meme...puis ma connexion a sauté et puis internet ! Du coup, j'ai pas pu repondre!
    maintenant j'ai un nouveau probleme ! youuuuupiiii !
    En fait, l'objectif est un puissance 4 , avec grille variable !

    J'ai donc une fonction qui vérifie si les colonnes, lignes ou diagonales sont gagnante, les fonctions pour ligne et colonne posent pas de problème, mais celle pour la diagonale si...

    mon code est :
    ligne et colonne sont le nombre de ligne et de colonne de la grille.
    L'appel de la fonction est : gagnediago(grille,nombreligne,nombrecolonne);

    1. int gagnediago(char grille[LIGNES][COLONNES], int ligne , int colonne) {
    2. int i,j,nontrouve,gagne=0;
    3. int lig_dep = 0;
    4. int lig_fin = 4;
    5. int col_dep = 0;
    6. int col_fin = 4;
    7.  
    8. for (i=lig_dep; i<lig_fin; i++) {
    9. for (j=col_dep; j <col_fin; j++) {
    10. // diagonale descendante
    11. if (grille[i][j] !='.' && grille[i][j]==grille[i+1][j+1] && grille[i+1][j+1]==grille[i+2][j+2] && grille[i+3][j+3]==grille[i][j] ) {
    12. gagne=1;
    13.  
    14. }
    15. // diagonale montante
    16. if ( grille[i][j] !='.' && grille[i][j]==grille[i+1][j-1] && grille[i+1][j-1]==grille[i+2][j-2] && grille[i+3][j-3]==grille[i][j] ) {
    17. gagne=1;
    18. printf("haha");
    19. }
    20.  
    21. }
    22. }
    23.  
    24. if (lig_fin == ligne && col_fin == colonne) {
    25. nontrouve = 1;
    26. }
    27.  
    28.  
    29.  
    30. if (gagne != 1) {
    31. if (col_fin == colonne) {
    32. col_dep = 0;
    33. col_fin = 4;
    34. lig_dep += 1;
    35. lig_fin += 1;
    36. }
    37. else {
    38. col_dep +=1;
    39. col_fin +=1;
    40. }
    41. }
    42.  
    43. return gagne;
    44. }


    Mon probleme :
    Et en fait la fonction ne prend pas en compte les deux dernières colonnes...vraiment étrange et je me l'explique pas...
    Voila le code complet : http://mkf.team.free.fr/puissance4.c

    Merci
    Lassé par la pub ? Créez un compte