ok je comprends. et si je fais:
est ce que c'est la meme chose que:Code:void matrix_load(char *file_name,int *t)
Code:void matrix_load(char *file_name,int t[7][7])
Version imprimable
ok je comprends. et si je fais:
est ce que c'est la meme chose que:Code:void matrix_load(char *file_name,int *t)
Code:void matrix_load(char *file_name,int t[7][7])
Non. Le type de l'argument n'est pas le même. Tu peux écrire par contre de façon équivalente:Citation:
ok je comprends. et si je fais:
est ce que c'est la meme chose que:Code:void matrix_load(char *file_name,int *t)
Code:void matrix_load(char *file_name,int t[7][7])
Code:
1
2
3 void matrix_load(char *file_name,int t[][7]) ou void matrix_load(char *file_name,int (*t)[7])
Non un tableau à deux dimensions de pointeurs sur intCitation:
Ici t serait un poiteur sur un tableau a double entree,Code:void matrix_load(char *file_name,int *t[7][7])
t est un pointeur sur un tableau de int à double entréeCode:void matrix_load(char *file_name,int (*t)[7][7])
Mamma mia. Ouvrir son livre de C avant de dire des bêtises, merci.Citation:
Envoyé par semaj_james
- Passer un tableau complet n'existe pas en C. On ne passe que l'adresse du premier élément.
- void f (int t[7][7]) est un prototype de fonction. t est un paramètre.
Non !Citation:
ne faudrait il pas faire:
Code:
1
2
3 void matrix_load(char *file_name,int *t[7][7]) ou void matrix_load(char *file_name,int t)
mon code marche tjrs pas je comprends pas je suis sur que c un truc con encore mais je vois pas ou ....
je vais vous donner plus delements : peut etre que quelaun va trouver , je vais tout reecrire si ca continue ...
le main :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 void matrix_load(char *file_name,int t[8][8]) { int i,j; int a[8]; char ligne[LONG]; FILE *fpfile;//output if((fpfile = fopen(file_name,"rt")) == NULL)// reading only { fprintf(stderr,"Error in load_block(): could not open file %s!\n",file_name); exit(1); } for(i=0;i<8;i++) { while (fgets(ligne,LONG,fpfile) != NULL) /* Stop on end of file or error */ { fscanf(fpfile,"%d %d %d %d %d %d %d %d", &a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7]); // We read the input file for(j=0;j<8;j++) { t[i][j]=a[j]; //fprintf(fpfile2,"%d",d); // We write on the output file printf(" %d\n",t[i][j]); } } } return ; }
le.h :Code:
1
2
3 int t[8][8]; matrix_load(file_name1,t);
voila ....Code:
1
2 void matrix_load(char *file_name,int t[8][8]) ;
Citation:
Envoyé par Battosaiii
- C'est pas "rt", mais "r".
- Il ne faut pas imbriquer les boucles. La boucle while va lire 8 lignes, ou mois, c'est tout.
- il faut tester le retourede fscanf(). Si il n'y a pas 8 conversions réussies, inutile de continuer. Au fait, on utilise déjà fgets() pour lire la ligne. On doit ensuite utiliser sscanf() pour convertir.
Mise au point, normalisation, présentation, simplification, sécurisation, <edit> Amélioration </edit>, vérification :
avec le fichierCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> int matrix_load (char const *file_name, int t[8][8]) { int err = 0; FILE *fpfile = fopen (file_name, "r"); if (fpfile != NULL) { int i = 0; /* Stop on end of file or error */ char ligne[64]; while (i < 8 && fgets (ligne, sizeof ligne, fpfile) != NULL) { /* was the line complete ? */ if (strchr (ligne, '\n') == NULL) { fprintf (stderr, "line error\n"); err = 1; break; } { /* We read the input file */ int a[8]; int n = sscanf (ligne, "%d %d %d %d %d %d %d %d" ,&a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7]); /* was the convertion successful ? */ if (n != 8) { fprintf (stderr, "convertion error\n"); err = 1; break; } else { int j; for (j = 0; j < 8; j++) { t[i][j] = a[j]; } i++; } } } fclose (fpfile), fpfile = NULL; } else { fprintf (stderr, "Error in load_block(): could not open file %s!\n", file_name); err = 1; } assert (fpfile == NULL); return err; } int main (void) { #define file_name1 "../../data/data.txt" int t[8][8] = { {0} }; int err = matrix_load (file_name1, t); if (!err) { int i; for (i = 0; i < 8; i++) { int j; for (j = 0; j < 8; j++) { printf ("%4d", t[i][j]); } printf ("\n"); } } return 0; }
Code:
1
2
3
4
5
6
7
8
9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
Bonjour Emmanuel, puis-je te poser une question sur ton code?
Que veux dire "return;" ? Tu ne retournes rien avec cette ligne je pense, est-il necessaire de le préciser cependant avec un type de retour void ?
Merci :)
Ici, il ne sert à rien. Il était dans le code du P.O. et je l'ai laissé, car il ne fait rien de mal.Citation:
Envoyé par KiLVaiDeN
Cependant, pour éviter les confusions, je le retire.
ok juste par curiosité, peut-être avait-il une utilité que je ne soupçonnais pas :) Merci !
Je viens de copier coller ta fonction sur mon programme et j'obtiens la meme erreur : a savoir affichage de nimporte quoi :
avec ce fichier :Citation:
0
255
255
255
255
255
255
255
1550739831
1701670760
2010983396
2354650
3539320
28
3541672
2089917395
3541664
2354496
1628527264
4587860
1628527274
10
2354536
1627469813
1628799904
1628527264
10
2089881233
3540488
2354548
1628527264
4
1628796691
1628316064
2354552
1627469889
3539320
2354650
2354968
1627699240
1628527264
2089917247
3539320
2089917163
1628360868
-1
65535
3540616
3481776
4
2354632
1628292071
1628334832
1056
2010972160
4
4198480
1628316064
2354664
1628224037
0
1627406864
0
0
Je suis perplexe , je pense que ca vient d'ailleurs( non non pas des ovnis) je fais regarder le reste du code. Une question chez toi ton programme marche correctement ?Citation:
0 255 255 255 255 255 255 255
1 255 255 255 255 255 255 255
2 255 255 255 255 255 255 255
3 255 255 255 255 255 255 255
4 255 255 255 255 255 255 255
5 255 255 255 255 255 255 255
6 255 255 255 255 255 255 255
7 255 255 255 255 255 255 255
Oui, et avec ton fichier de données, il donneCitation:
Envoyé par Battosaiii
J'ai bien sûr modifié l'affichage comme suit :Code:
1
2
3
4
5
6
7
8
9 0 255 255 255 255 255 255 255 1 255 255 255 255 255 255 255 2 255 255 255 255 255 255 255 3 255 255 255 255 255 255 255 4 255 255 255 255 255 255 255 5 255 255 255 255 255 255 255 6 255 255 255 255 255 255 255 7 255 255 255 255 255 255 255
Ajoute une trace 'erreur' avant le break. Il y a peut être un problème avec le format du fichier.Code:printf ("%4d", t[i][j]);
Et aussi, augmente la taille de la ligne, ce sera plus clair...
J'ai modifié mon programme pour tenir compte des différents cas d'erreur..Code:char ligne[128];
arf effectivement ca venait du fichier . Le truc con c'est qua la fin de la ligne il y avait 2 espaces a chaque fois. Apparament il aimait pas ca. Ca marche hourra !! Merci beaucoup emmanuel .