noob need help - C - Programmation
Marsh Posté le 22-01-2014 à 19:37:21
Mouaif, pas mal d'erreurs effectivement. Déjà, je te conseille vivement d'activer tous les avertissements du compilateur, ça t'aurais averti de quelques problèmes. Avec Code::Blocks tu vas dans Settings => Compiler and debugger => Global Compiler Settings => Compiler flags => Enable all compiler Warnings (-Wall). Genre avec ton programme, ça donne :
Code :
|
Ça, c'est parce que t'as oublié d'inclure stdio.h. Avec, ça donne:
Code :
|
Donc :
Code :
|
Marsh Posté le 23-01-2014 à 12:56:52
Merci beaucoup pour cette aide ça ma bien fais avancer.
Je me permet de poser une autre question :
j'ai deja un tableau dans mon main et je voudrais que tab[l][co] = 'B'; change la valeur du tableau de mon main.
Je sais qu'il faut utilise les pointeurs je crois savoir se qu'est un pointeur mais je ne sais pas commen les utiliser....
Marsh Posté le 23-01-2014 à 19:46:51
neounit a écrit : Je me permets de poser une autre question : |
Bonjour
Code :
|
neounit a écrit : Je sais qu'il faut utilise les pointeurs je crois savoir se qu'est un pointeur mais je ne sais pas commen les utiliser.... |
Donc conclusion tu ne sait pas ce qu'est un pointeur. Ben tu vois, t'as de la chance parce que quand il s'agit de tableaux, le nom brut du tableau (sans ses indices) est en fait l'adresse de son premier élément. Donc quand il s'agit d'un tableau, tout comme M. Jourdain faisait de la prose sans le savoir, tu utilises alors déjà les pointeur sans le savoir.
Et donc quand je passe "tab" à la fonction "modif", je lui passe une adresse qu'elle va stocker dans son paramètre "x" qui, lui, est un pointeur.
Marsh Posté le 29-01-2014 à 18:51:22
Merci pour ta réponse.
J'ai avancé mais j'ai un autre problème, et cette fois je crois bien les pointeurs soient mon seul échappatoire.
Dans cette fonction :
int orrganisation3(int x, int y, int plateau[8][8], int a, int b, int fin1,int fin2)
{
int i,j;
if(plateau[a+x][b+y] == 2){
for(i=0;i<8;i++){
for(j=0;j<8;i++){
if(plateau[a+x+i][b+y+j] == 1){
fin1=a+x+i;
fin2=a+x+i;
return 1;}
else if(plateau[a+x+i][b+y+j] == 0){
return 0;
}
}
}
}
}
Je voudrais pointer sur les valeurs de fin1 et fin2 dans :
int direction(int plateau[8][8], int a, int b)
{
int x,y;
if(oganisation3( x, y, plateau, a, b, fin1, fin2) == 1){
if(a<fin1){
for(x=a;x<=fin1;x++){
for(y=b;y<=fin2;b++){
plateau[a][b] = 1;
}
..............
C'est possible avec les pointeurs non?
Marsh Posté le 29-01-2014 à 19:51:11
neounit a écrit : J'ai avancé mais j'ai un autre problème, et cette fois je crois bien les pointeurs soient mon seul échappatoire. |
Je n'ai pas dit que tu ne devais pas les utiliser, j'ai dit que dans certains cas tu les utilisais déjà sans t'en rendre compte...
neounit a écrit : Dans cette fonction : |
Exact. Si une fonction fille doit modifier des variables situées dans une fonction mère, alors cela ne peut se faire que par pointeur.
Il faut que la fonction mère passe l'adresse de la variable à la fonction fille ; et la fonction fille stocke cette adresse dans un pointeur. Ainsi, ayant l'adresse de la variable, la fonction fille peut taper dasn cette adresse (la même pour tout le programme) et changer ce qui s'y trouve ; ce qui se répercute automatiquement dans la variable en question
Exemple
Code :
|
Marsh Posté le 30-01-2014 à 17:32:45
En fait j'ai un "Othello" a faire dans la console pour les regles http://www.ffothello.org/jeu/regles.php
J'ai applique les conseil, j'ai mon programme mais je n’arrive pas a le faire fonctionner !!!
je me permet, encore, de vous demander conseil.
voila mon main.c
Code :
|
mon othello.c
Code :
|
et mon othello.h
Code :
|
J’espère ne pas vous saouler avec mes question...
En espérant que quelqu’un m'aide dans mon projet je vous beaucoup déjà pour l'aide !
Marsh Posté le 30-01-2014 à 20:34:06
le programme fonctionne mais en faite mais il ne quand je rentre les coordonnées rien ne s'affiche.
Alors que dans le fonction :"int jouer_blanc(int plateau[8][8])" si je remplace : if(possible(plateau,a,b ) == 1);{
jouer_case(plateau,a ,b);}
par: plateau[b][a] = 1
la case s'affiche bien
Marsh Posté le 30-01-2014 à 20:38:08
C'est pour ça qu'il faut passer au debugger, c'est obligatoire si tu veux savoir ce qui se passe.
Si je dis ça c'est que je l'ai fait et j'ai tout de suite vu où ça clochait.
Mais je te laisse trouver toi même.
Marsh Posté le 31-01-2014 à 17:12:28
Je me suis renseigner sur l'utilisation du debugger, enlevé tout les warning et réglé quelque problème :
Code :
|
Mais toujours rien de s'affiche sur mon plateau...
Marsh Posté le 31-01-2014 à 18:17:24
neounit a écrit : Je me suis renseigner sur l'utilisation du debugger, enlevé tout les warning et réglé quelque problème : |
C'est bien, mais tu l'as utilisé au moins ?
Car c'est pas tout de juste se renseigner, il faut aussi s'en servir.
edit : je vois que tu as corrigé le bug que j'avais repéré hier, continue
Marsh Posté le 31-01-2014 à 21:14:53
hello
juste un petit conseil, une simplification en faite.
pour convertir les lignes 1,2,3,4 ... 8 et les colonnes abcd...h en numéro de lignes et colonne tu peux utiliser le code ASCII du caractère.
le caractère a minuscule vaut 65 le b=66 c=67 etc donc ton numéro de colonne vaut colonne - 65:
par ex:
printf("\nSaisir la lettre de la colonne ou vous voulez jouer :" );
scanf("%s", &colonne);
if (colonne[1] == '\0' && colonne[0] >= 'a' && colonne[0] <= 'h') {
a=colonne[0] - 65;
}
else {
/* ici un petit message d'erreur genre saisie incorrecte */
}
voilou
@+
Marsh Posté le 22-01-2014 à 18:18:26
Bonjour,
Je suis nouveau dans le domaine donc pardonné mon ignorance.
J’essaye de faire un jeux sur la console a partir de code blocks.
Le joueur doit entrer un chiffre pour les lignes et une lettre pour les colonnes.
En faite je voudrait que la lettre que le joueur va rentrer se convertisse en numéro afin de trouver le numéro de la colonne.
int jouer_blanc()
{
int l,co;
char* tab[8][8], colonne;
printf("\n\nSaisir le numero de la ligne ou vous voulez jouer :" );
scanf("%d", l);
printf("\nSaisir la lettre de la colonne ou vous voulez jouer :" );
scanf("%c", *colonne);
switch(*colonne){
case 'a' : co = 0;
case 'b' : co = 1;
case 'c' : co = 2;
case 'd' : co = 3;
case 'e' : co = 4;
case 'f' : co = 5;
case 'g' : co = 6;
case 'h' : co = 7;
default : printf("Il n'y a pas de %c sur se plateau", colonne);}
tab[l][co] = 'B';
}
Apres avoir rentrer la première valeur le programme cesse de fonctionner.
la commande switch peut être utilisé avec un char?
j'ai essayé avec :
if(colonne == 'a')
co = 0;
if else(colonne == 'b')
co = 1;
if else(colonne == 'c')
co = 2;
if else(colonne == 'd')
co = 3;
if else(colonne == 'e')
co = 4;
if else(colonne == 'f')
co = 5;
if else(colonne == 'g')
co = 6;
if else(colonne == 'h')
co = 7;
Mais c'est encore pire ^^