#26 Le 11/10/2008, à 23:05
- tiky
Re : problème programme C
ça ne marche pas ça :
size_t size = sizeof( tab ) / sizeof( int );
À si si, ça marche, je l'ai testé avant de poster le code. sizeof donne la taille que prend le tableau en mémoire, et cela quelque soit la dimension du tableau.
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#27 Le 11/10/2008, à 23:11
- lebossejames
Re : problème programme C
size_t size fonctionne !!
Hors ligne
#28 Le 11/10/2008, à 23:17
- lebossejames
Re : problème programme C
Avec ce code si j'ai bien compris, on ne peut pas modifier les valeurs de tab dans "function".
#include <stdio.h>
#include <stdlib.h>
void function( int tab[5][5] )
{
int i, j;
for( i=0; i < 5; i++ )
{
for( j=0; j < 5; j++ )
printf( "%i\n", tab[i][j] );
}
}
int main( void )
{
int tab[5][5];
int i, j;
for( i=0; i < 5; i++ )
{
for( j=0; j < 5; j++ )
{
tab[i][j] = i;
}
}
function( tab );
return 0;
}
Hors ligne
#29 Le 11/10/2008, à 23:56
- Link31
Re : problème programme C
Avec ce code si j'ai bien compris, on ne peut pas modifier les valeurs de tab dans "function".
Si.
"int tab[5][5]" dans la liste de paramètres de function() n'est en fait (en interne) qu'un simple pointeur vers le premier entier du tableau ("int* tab_ptr"), et toutes les occurrences de "tab[y][x]" sont remplacées par "*(tab_ptr+y*_ptr+x)".
En C, tout est passé par valeur, à moins de passer des pointeurs aux fonctions (dans ce cas, ce sont les pointeurs eux-mêmes qui sont passés par valeur). Et "int tab[5][5]" dans une liste de paramètres n'est qu'un pointeur déguisé.
Hors ligne
#30 Le 12/10/2008, à 00:01
- tiky
Re : problème programme C
Oui, en C, tous les arguments sont passés par valeur. Une copie de la variable locale à la fonction est crée lors de son appel et la valeur est copiée dedans. C'est valable également pour les pointeurs, l'adresse est copiée, mais bien évidemment, l'espace mémoire vers lequel il pointe n'est pas copié. C'est là toute l'utilité des pointeurs en C.
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#31 Le 12/10/2008, à 00:03
- tiky
Re : problème programme C
lebossejames a écrit :Avec ce code si j'ai bien compris, on ne peut pas modifier les valeurs de tab dans "function".
Si.
"int tab[5][5]" dans la liste de paramètres de function() n'est en fait (en interne) qu'un simple pointeur vers le premier entier du tableau ("int* tab_ptr"), et toutes les occurrences de "tab[y][x]" sont remplacées par "*(tab_ptr+y*_ptr+x)".
En C, tout est passé par valeur, à moins de passer des pointeurs aux fonctions (dans ce cas, ce sont les pointeurs eux-mêmes qui sont passés par valeur). Et "int tab[5][5]" dans une liste de paramètres n'est qu'un pointeur déguisé.
Je me suis mal exprimé, je voulais dire qu'on ne pouvait pas modifier les valeurs de tab du main(). Évidemment la copie locale à la fonction n'étant pas déclaré comme constant, on peut la modifier mais toutes ses modifications seront perdues à la fin de la fonction.
Dernière modification par tiky (Le 12/10/2008, à 00:03)
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#32 Le 12/10/2008, à 00:50
- Link31
Re : problème programme C
toutes ses modifications seront perdues à la fin de la fonction.
Ce n'est pas ce que j'ai écrit, relis mon message précédent. Un paramètre "int tab[5][5]" est en réalité un pointeur "int* tab_ptr" vers le premier élément du tableau du main().
Je te laisse vérifier toi-même si tu ne me crois pas :
#include <stdio.h>
void fonction(int tab[5][5])
{
tab[1][2] = 8;
}
int main()
{
int tab[5][5];
tab[1][2] = 3;
printf("tab[1][2]=%i\n", tab[1][2]);
fonction(tab);
printf("tab[1][2]=%i\n", tab[1][2]);
return 0;
}
Dernière modification par Link31 (Le 12/10/2008, à 00:51)
Hors ligne
#33 Le 12/10/2008, à 00:53
- tiky
Re : problème programme C
tiky a écrit :toutes ses modifications seront perdues à la fin de la fonction.
Ce n'est pas ce que j'ai écrit, relis mon message précédent. Un paramètre "int tab[5][5]" est en réalité un pointeur "int* tab_ptr" vers le premier élément du tableau du main().
Je te laisse vérifier toi-même si tu ne me crois pas :
#include <stdio.h> void fonction(int tab[5][5]) { tab[1][2] = 8; } int main() { int tab[5][5]; tab[1][2] = 3; printf("tab[1][2]=%i\n", tab[1][2]); fonction(tab); printf("tab[1][2]=%i\n", tab[1][2]); return 0; }
Ah bah oui, effectivement, merci Oui donc il passe bien un pointeur et pas une copie lorsqu'il s'agit d'un tableau. Je pensais qu'il faisait une copie.
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#34 Le 12/10/2008, à 11:01
- lebossejames
Re : problème programme C
donc mon problème vient de ma boucle do.. while car lorsque mon chiffre que je rentre est supérieur à 6 il ne reboucle pas mais m'affiche bien "resaisir le chiffre" puis sort de la boucle afin de faire la suite de mon programme qui affiche un tableau:
j=1;
do
{
printf("Saisir un chiffre:\n");
scanf("%1d",&chiffre);
printf("%d",chiffre); /* chiffre =7 par exemple*/
if((chiffre>6) || (chiffre<1))
{
printf("Resaisir le chiffre\n");
}
else
{
j=0;
}
}
while(j==1);
Dernière modification par lebossejames (Le 12/10/2008, à 11:02)
Hors ligne
#35 Le 12/10/2008, à 11:15
- morphoneo69
Re : problème programme C
Pourtant en testant ton code ça marche bien.
#include <stdio.h>
int main(){
int j=1;
int chiffre;
do
{
printf("Saisir un chiffre:\n");
scanf("%1d",&chiffre);
printf("%d",chiffre); /* chiffre =7 par exemple*/
if((chiffre>6) || (chiffre<1))
{
printf("Resaisir le chiffre\n");
}
else
j=0;
}
while(j==1);
return 0;
}
eddy@eddy-laptop:~$ gcc test.c
eddy@eddy-laptop:~$ ./a.out
Saisir un chiffre:
7
7
Resaisir le chiffre
Saisir un chiffre:
9
9
Resaisir le chiffre
Saisir un chiffre:
6
6
Hors ligne
#36 Le 12/10/2008, à 11:50
- lebossejames
Re : problème programme C
justement le code est bon
mais dans mon programme j'utilise un tableau auquel je rentre le numéro de la colonne et la ligne puis si la colonne est supérieur à un nombre alors il redemande la saisit MAIS dans mon programme il ne redemande pas la saisie mais passe à la suite "sort du do..while".
Hors ligne
#37 Le 12/10/2008, à 15:00
- morphoneo69
Re : problème programme C
Si tu regardes mon test quand je donne un numéros supérieur à 6 ( 7 et 9 dans le test), il me redemande bien de resaisir un nombre. Ou alors j'ai rien compris à ce que tu voulais.
Hors ligne
#38 Le 12/10/2008, à 16:00
- lebossejames
Re : problème programme C
oui j'ai vu.
mais dans mon programme il n'a pas l'air de tenir en compte.
Hors ligne
#39 Le 12/10/2008, à 16:04
- morphoneo69
Re : problème programme C
C'est le même morceau de code.
Hors ligne
#40 Le 12/10/2008, à 17:56
- lebossejames
Re : problème programme C
alors comment cela se fait que dans mon programme cela pose problème.
Hors ligne
#41 Le 12/10/2008, à 19:51
- morphoneo69
Re : problème programme C
Tu peux faire une archive de tes sources et les upload ? (sur dl.free.fr par exemple)
Hors ligne
#42 Le 12/10/2008, à 21:08
- lebossejames
Re : problème programme C
ok je vous passe le lien:
http://dl.free.fr/nLIT6hefg
Hors ligne
#43 Le 12/10/2008, à 21:21
- morphoneo69
Re : problème programme C
Ton code fonctionne, enfin la partie des coordonnées.
A B C D E F G H I J
1 . . . . . . . . . .
2 . . . . . . . . . .
3 . . . . . . . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
0 . . . . . . . . . .
coordonnees
Z 12
Z 12
26
Resaisir coordonnee
coordonnees
J 6
J 6
10
Resaisir coordonnee
coordonnees
A 13
A 13
1
T'as peut-être confondu la lettre la colonne et le chiffre. Je sais pas mais l'erreur doit-être bête.
Hors ligne
#44 Le 12/10/2008, à 22:26
- lebossejames
Re : problème programme C
non je n'ai rien confondu justement !!
Hors ligne
#45 Le 12/10/2008, à 22:28
- morphoneo69
Re : problème programme C
Ca fonctionne bien chez moi car si je donne une lettre F (c'est à dire apres la 6eme lettre), il me redemande de saisir mes coordonnées.
Sinon fait voir l'execution de ton programme parceque c'est bizarre ce truc.
Hors ligne
#46 Le 12/10/2008, à 22:50
- lebossejames
Re : problème programme C
Hors ligne
#47 Le 13/10/2008, à 08:02
- morphoneo69
Re : problème programme C
Et si tu donnes comme coordonnées "J3"
Hors ligne
#48 Le 13/10/2008, à 09:32
- lebossejames
Re : problème programme C
dans la photo j'ai donné b1 comme coordonnée !!
Hors ligne
#49 Le 13/10/2008, à 09:33
- lebossejames
Re : problème programme C
je suis souvent obligé de relancer plusieurs fois le programme afin qu'il m'affiche ce que je veux; sinon quand je rentre G6 par exemple il accecpte et affiche quand meme le tableau
Hors ligne
#50 Le 13/10/2008, à 10:03
- morphoneo69
Re : problème programme C
Tu compile comment ? Tu tournes sous quel OS ?
Hors ligne