[C] Erreur de syntaxe...

Erreur de syntaxe... [C] - C++ - Programmation

Marsh Posté le 07-12-2002 à 20:34:09    

------------------------------
 
1er probleme :
 
j'obtiens cette erreur , dans les lignes surlignées en noir , ca vient de koi ??
 

Parse Error Before "T"

[PROBLEME RESOLU]
 
-----------------------------------
 
2e probleme :  
 

incompatible types in assignment


 
j'obtiens cette erreur sur les 3 lignes surlignés en rouge...
 
---------------------------------------
 
#include <stdio.h>
 
#define MAX 9
 
typedef struct {
 
 char nom[20];
 int region[98];
 float ChAff;
 
 } T[MAX] ;
 
 
void Tri() {
 
int p[98];
int i=0;
 
for (i=0 ; i < MAX ; i++ ) {
 
 if (T[i].region > T[i+1].region) {
 
 p = T[i].region;
 T[i].region = T[i+1].region;
 T[i+1].region = p;

         
        }
 
 }
 
}
 
void Aff_reg() {
 
 
int i=0 ;
int reg = T[i].region ;
float s = 0;
 
while (T[i].region != "" ) {
 
 if (T[i].region == reg) {
 s = T[i].chAff;
        }
 
 else {
 
 printf("Total region %d = %f\n" , T[i].region ; s);
 reg = T[i].region;
 s=0 ;
 }
 
 i++;
 }
 
main() {
 
Tri();
Aff_reg();
 
}


Message édité par raph93 le 08-12-2002 à 11:51:36

---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 07-12-2002 à 20:34:09   

Reply

Marsh Posté le 07-12-2002 à 20:41:52    

typedef struct {
 
char nom[20];
int region[98];
float ChAff;
 
} T[MAX] ;
 
moi je veux bien que tu définisse un type, encore faut-il lui donner un nom


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 07-12-2002 à 21:14:53    

Ce typedef struct est tout à fait correct !
Pas besoin d'y coller un nom

Reply

Marsh Posté le 07-12-2002 à 21:17:16    

Le problème est que tu n'as pas déclaré ton tableau.
T n'est pas un tableau, c'est juste un raccourci pour dire "tableau de 9 objets de ma struct"
 
Essaye comme ça :
 
typedef struct {
 
char nom[20];
int region[98];
float ChAff;
 
} montype;
montype T[MAX];
 
Mais si tu relis ton code, tu auras d'autres surprises : il manque un '}'...


Message édité par leneuf22 le 07-12-2002 à 21:26:14
Reply

Marsh Posté le 07-12-2002 à 21:22:36    

ce que je veux dire c'est que ici, le but ce n'est pas de définir un type mais d'instancier un tableau de MAX structure.
 
 

Code :
  1. typedef struct {
  2. char nom[20];
  3. int region[98];
  4. float ChAff;
  5. } montype;
  6. montype T[MAX];

 :jap:


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 08-12-2002 à 11:37:03    

:bounce:


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 08-12-2002 à 11:39:46    

:heink:  :??:


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 08-12-2002 à 11:40:51    


 
topic edité  :D
 
y'a une 2e erreur


Message édité par raph93 le 08-12-2002 à 11:41:16

---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 08-12-2002 à 11:43:42    

aujourd'hui dimanche, nous avons un gagant qui confond pointeur et tableau et qui ne sait pas copier un tableau dans un autre :lol:


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 08-12-2002 à 11:44:16    

Taz@PPC a écrit :

aujourd'hui dimanche, nous avons un gagant qui confond pointeur et tableau et qui ne sait pas copier un tableau dans un autre :lol:  


 
le C c pas ma tasse de Thé  :D


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 08-12-2002 à 11:44:16   

Reply

Marsh Posté le 08-12-2002 à 11:48:53    

Code :
  1. p = T[i].region;
  2. T[i].region = T[i+1].region;
  3. T[i+1].region = p;


 
regin est un tableau donc pas une l-value c'est à dire que ca peut pas etre a gauche d'un '='
 
puisqu'apparemment tu ne connais pas les pointeurs, on va faire simple.
 
ici ce que tu veux c'est permuter 2 tableaux, donc tu passes par un tableau temporaire: en tout il y a 3 copies. mais la copie de tableau en C ce n'est pas une affectation (deja parce qu'avec des tableaus le = ne marche po), c'est la recopie élément par élément.
 
du genre une petite fonction

Code :
  1. void tabcpy(int t1[], int t2[], unsigned n_elements)
  2. {
  3.   unsigned i;
  4.   for(i=0; i<n_elements; ++i)
  5.   {
  6.     t1[i]=t2[i];
  7.   }
  8. }
  9. tabcpy(p, T[i].region, 98);


 
 
il existe des routines optimisées en C, mais tu as tout le temps de découvrir ça.


Message édité par Taz@PPC le 08-12-2002 à 11:50:09

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 08-12-2002 à 11:53:08    

Taz@PPC a écrit :

Code :
  1. p = T[i].region;
  2. T[i].region = T[i+1].region;
  3. T[i+1].region = p;


 
regin est un tableau donc pas une l-value c'est à dire que ca peut pas etre a gauche d'un '='
 
puisqu'apparemment tu ne connais pas les pointeurs, on va faire simple.
 
ici ce que tu veux c'est permuter 2 tableaux, donc tu passes par un tableau temporaire: en tout il y a 3 copies. mais la copie de tableau en C ce n'est pas une affectation (deja parce qu'avec des tableaus le = ne marche po), c'est la recopie élément par élément.
 
du genre une petite fonction

Code :
  1. void tabcpy(int t1[], int t2[], unsigned n_elements)
  2. {
  3.   unsigned i;
  4.   for(i=0; i<n_elements; ++i)
  5.   {
  6.     t1[i]=t2[i];
  7.   }
  8. }
  9. tabcpy(p, T[i].region, 98);


 
 
il existe des routines optimisées en C, mais tu as tout le temps de découvrir ça.


 
merci , c pas gagner


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 08-12-2002 à 11:57:10    

est ce que tu comprends déjà?
 
 
sinon, plus compliqué, tu as dans string.h la fonction memcpy, beaucoup plus rapide
 

Code :
  1. const unsigned N=98;
  2. type tablo1[N];
  3. type tablo2[N];
  4. /* ...des trucs ... */
  5. memcpy(tablo1, tablo2, N*sizeof(type)); // tablo1 est maintenant identique à tablo2


 


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 08-12-2002 à 12:02:33    

Taz@PPC a écrit :

est ce que tu comprends déjà?
 
 
sinon, plus compliqué, tu as dans string.h la fonction memcpy, beaucoup plus rapide
 

Code :
  1. const unsigned N=98;
  2. type tablo1[N];
  3. type tablo2[N];
  4. /* ...des trucs ... */
  5. memcpy(tablo1, tablo2, N*sizeof(type)); // tablo1 est maintenant identique à tablo2


 
 


 
jsuis en train d'essayer de decortiquer ton post precedent  :)


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 09-12-2002 à 00:43:23    

Code :
  1. //Help macros for aggregates (array or structure)
  2. //Parts are for C++
  3. //Doesn't pretend to be standard compliant, portable, fully protected, or bugless.
  4. //Required
  5. #include <memory.h>
  6. #include <stddef.h>
  7. #include <assert.h>
  8. //Test if argument is an array, not a pointer or address
  9. //array  : returns 1/true (string litterals are arrays)
  10. //pointer: returns 0/false
  11. //litteral: error '&' on constant
  12. //other   : error subscript requires array or pointer type
  13. #define ISARRAY(a) ( (void*)&(a)==(void*)&(a)[0] )
  14. //Number of array elements
  15. #define DIMOF(a) ( assert(ISARRAY(a)) ,\
  16.                    sizeof(a)/sizeof(a)[0] )
  17. //The following come in 2 versions each:
  18. //fast  : expression, doesn't suit C++ allocating types. MAY only be faster.
  19. //normal: statement , can work with different destination & source types.
  20. //(result is undefined if areas overlap !)
  21. //Copy n array elements from src into dst (arrays or pointers)
  22. #define ARRAYCOPYN(dst,src,n) do{for(ptrdiff_t i= (n)-1 ; i>=0 ; --i)\
  23.                                   (dst)[i]= (src)[i] ;}while(0)
  24. #define ARRAYCOPYNFAST(dst,src,n) ( assert(sizeof(src)[0]==sizeof(dst)[0]) ,\
  25.                                     memcpy( dst, src, (n) * sizeof (src)[0] ) )
  26. //Copy array elements...
  27. //...from srcfirst included (array or pointer)...
  28. //...to   srcafter excluded (pointer on same array as srcfirst)...
  29. //...into dst               (array or pointer).
  30. #define ARRAYCOPYRANGE(dst,srcfirst,srcafter)     ARRAYCOPYN    ( dst, srcfirst, (srcafter)-(srcfirst) )
  31. #define ARRAYCOPYRANGEFAST(dst,srcfirst,srcafter) ARRAYCOPYNFAST( dst, srcfirst, (srcafter)-(srcfirst) )
  32. //Copy src to dst (both arrays of same dimension)
  33. #define ARRAYCOPY(dst,src)   do{ assert(ISARRAY(dst) && ISARRAY(src) && DIMOF(src)==DIMOF(dst)) ;\
  34.                                  ARRAYCOPYN    (dst, src, DIMOF(src));}while(0)
  35. #define ARRAYCOPYFAST(dst,src) ( assert(ISARRAY(dst) && ISARRAY(src) && DIMOF(src)==DIMOF(dst)) ,\
  36.                                  ARRAYCOPYNFAST(dst, src, DIMOF(src)) )


C'est pour t'aider à comprendre :ange: .
 
Non, sérieux, pourquoi il n'y a pas des trucs comme ça en standard ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 09-12-2002 à 07:28:09    

vade retro! efface moi ce post tout de suite!


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 10-12-2002 à 02:29:46    

Non non.
 
On est en C ici, il faut être courageux et assumer les horreurs nécessaires.
Et encore, j'ai pas tout mis.
 
Mais bien masqué dans un header, je t'assure que c'est plus propre.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 10-12-2002 à 08:41:40    

:whistle:


---------------
du bon usage de rand [C] / [C++]
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed