Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1675 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème d'incrémentation de variable!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème d'incrémentation de variable!

n°1880411
vgiant
Posté le 04-05-2009 à 03:58:53  profilanswer
 

Bonjour à tous et à toutes! Tout d'abord, merci de prendre du temps pour lire mon problème, qui sera pour vous très simple à résoudre je pense!
 
Alors voilà, j'ai créée une bataille navale, et tout fonctionne quasiment, excepté l'affichage "tel bateau est coulé", car je n'arrive pas à incrémenté une variable!
J'ai une fonction coup qui renvoit dans le main la valeur_retour (pour compter les cases qui restent dans la grille, et ainsi savoir si le jeu est fini ou non!)!
Tout fonctionne, mon problème est situé sur ce qui est en gras dans mon code :  
 

Code :
  1. int coup(char* joueur, char grille_joueur[27][27], char
  2. grille_adversaire[27][27], int taille) {
  3. char abscisse, ordonnee;
  4. int colonne, ligne, valeur_retour, continue_saisie, vidage,pa=0;
  5. while ((vidage=getchar())!='\n');
  6. do {
  7. printf("%s : saisissez votre coup ", joueur);
  8. abscisse = getchar();
  9. /*printf("%c", abscisse);*/
  10. ordonnee = getchar();
  11. /*printf("%c\n", ordonnee);*/
  12. colonne = valide_abscisse(abscisse);
  13. ligne = valide_ordonnee(ordonnee);
  14. continue_saisie = 1;
  15. if ((colonne != -1) && (ligne != -1))
  16. if (grille_joueur[ligne][colonne] == '.')
  17. continue_saisie = 0;
  18. else
  19. {
  20. printf("colonne vaut %d\n",colonne);
  21. printf("ligne vaut %d\n",ligne);
  22. printf("Coup deja joue\n" );
  23. }
  24. }
  25. while (continue_saisie);
  26. if (grille_adversaire[ligne][colonne] == '.') {
  27. grille_joueur[ligne][colonne] = 'o';
  28. printf("a l'eau !\n" );
  29. valeur_retour = 0;
  30. }
  31. else if (grille_adversaire[ligne][colonne] == 'P') {
  32. grille_joueur[ligne][colonne] = 'x';
  33. pa=pa+1;
  34. if (pa!=5){
  35. printf("Porte-avions touche %d !\n",pa);
  36. }
  37. else
  38. {
  39. printf("Porte-avions coule !\n" );
  40. }
  41. valeur_retour = 1;
  42. }
  43. else if (grille_adversaire[ligne][colonne] == 'C') {
  44. grille_joueur[ligne][colonne] = 'x';
  45. printf("Croiseur touche !\n" );
  46. valeur_retour = 1;
  47. }
  48. else if (grille_adversaire[ligne][colonne] == 'D') {
  49. grille_joueur[ligne][colonne] = 'x';
  50. printf("Destroyer touche !\n" );
  51. valeur_retour = 1;
  52. }
  53. else if (grille_adversaire[ligne][colonne] == 'S') {
  54. grille_joueur[ligne][colonne] = 'x';
  55. printf("Sous-marin touche !\n" );
  56. valeur_retour = 1;
  57. return valeur_retour;
  58. }


 
Voilà, à savoir que j'ai rentré les lettres des bateaux dans la grille du joueur pour savoir lequel était touché, maintenant j'aimerai pouvoir dire que le bateau est coulé! Seulement, la manière dont j'ai affecté la variable "pa" fait qu'à chaque fois que cette fonction coup est appelée, la variable "pa" retrouve sa valeur 0 par défaut.
 
A quel moment faut-il que je l'affecte à 0 pour qu'elle s'incrémente ensuite normalement? Faut-il faire une boucle quelque part?
J'arrive plus à réfléchir là, je sais que la réponse est toute bête, mais j'en peux plus, je m'en réfère à vos conseils avisés!
 
Merci d'avance pour votre réponse! :hello:

Message cité 1 fois
Message édité par vgiant le 04-05-2009 à 04:11:52
mood
Publicité
Posté le 04-05-2009 à 03:58:53  profilanswer
 

n°1880433
olivthill
Posté le 04-05-2009 à 09:27:06  profilanswer
 

Il y a plusieurs solutions :
 
1. Déclarer la variable "pa" dans la fonction appelant la fonction coup() ; l'initialiser dans la fonction appelante ; la passer à la fonction coup() en paramètre en passant son adresse (donc avec "&" devant le nom) et la renseigner dans la fonction coup() (avec "*" devant le nom car ce serait un pointeur). C'est la meilleure solution, mais il existe aussi deux autres solutions :
2. Déclarer la variable "pa" en tant que variable "statique" dans la fonction au lieu de l'avoir déclaré avec l'option "auto" par défaut.
3. Déclarer la variable "pa" en dehors de la fonction de manière à ce que cette variable soit globale et l'initialiser dans la fonction appelante.

n°1880442
vgiant
Posté le 04-05-2009 à 09:48:47  profilanswer
 

Je n'y arrive toujours pas... J'ai essayer la déclaration globale de la variable, mais j'ai encore le soucis de savoir comment la mettre dans ma fonction, avec quel type de boucle et à quel moment l'initialiser pour qu'elle ne revienne pas à sa valeur d'initialisation à chaque appel de la fonction!!! Je craque!

n°1881799
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-05-2009 à 12:16:35  profilanswer
 

vgiant a écrit :

Tout fonctionne, mon problème est situé sur ce qui est en gras dans mon code :  


Ton code est incomplet


 
-------------- Build: Debug in hello ---------------
 
Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c: In function `coup':
C:\dev\hello\main.c:5: warning: implicit declaration of function `getchar'
C:\dev\hello\main.c:7: warning: implicit declaration of function `printf'
C:\dev\hello\main.c:12: warning: implicit declaration of function `valide_abscisse'
C:\dev\hello\main.c:13: warning: implicit declaration of function `valide_ordonnee'
C:\dev\hello\main.c:16: warning: suggest explicit braces to avoid ambiguous `else'
C:\dev\hello\main.c: At top level:
C:\dev\hello\main.c:2: warning: unused parameter 'taille'
C:\dev\hello\main.c: In function `coup':
C:\dev\hello\main.c:4: warning: 'valeur_retour' might be used uninitialized in this function
obj\Debug\main.o: In function `coup':
C:/dev/hello/main.c:12: undefined reference to `_valide_abscisse'
C:/dev/hello/main.c:13: undefined reference to `_valide_ordonnee'
C:\Program Files\CodeBlocks\MinGW\lib/libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
3 errors, 7 warnings



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème d'incrémentation de variable!

 

Sujets relatifs
Requete xml distant et variable php[SQL] Problème création BDD SQL
Problème changement fenêtre[RESOLU] Probleme Application FileDialog
probléme lors du download de zip en phpPHP : Calcul opération dans une variable
Petit probleme en javaProblème sur un programme VBA lorsqu'on ouvre 2 fichiers excel
Problème redirection automatique et méthode POSTProblème d'affichage double boucle (mysql_fetch_array)
Plus de sujets relatifs à : Problème d'incrémentation de variable!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR