Array Proleme

Array Proleme - C - Programmation

Marsh Posté le 11-06-2008 à 16:20:25    

Salut a tous
j ai un Probleme d array. j ai defini une fonction comme suite
adresse= 0x45;
PORT[12]={'0x12','0x14','0x45','0x52'}
Pass[12]={'RA1','Ra2','RA3','Ra4'}
 
char trouver( char addresse)
{
int i=0;
int a=0;
for (i=0;i<17;i++)
{
  if(Port[i]=adresse)
{
  a=i;
}
}
return Pass[a];
}
 
et j aimerais que cette fonction me retourne Ra3. que puije faire pour ameliorer le Programme.  
A++

Reply

Marsh Posté le 11-06-2008 à 16:20:25   

Reply

Marsh Posté le 11-06-2008 à 16:47:05    

"PORT[12]" et "Pass[12]" ok, mais de quel type ? Et pourquoi "12" ?
 
Dans ta boucle for, d'où sort le 17 ?
C'est pas génant de parcourir PORT jusqu'à 17 valeurs quand ce tableau n'en contient que 12 ? [:opus dei]
(Hint : les magic numbers, çaÿ mal)
 
De plus, y a pas comme un problème entre "addresse" et "adresse" ? [:petrus dei]

Reply

Marsh Posté le 11-06-2008 à 16:53:23    

Ok c est juste que j ecrivais de nouveau le programm sans copier de mon programme nous pouvons reduire les array a 4.  que puije faire pour resoudre mon Probleme. C est tres important pour moi

Reply

Marsh Posté le 11-06-2008 à 16:54:10    

Eh bien ton problème, en dehors du fait que ton programme est truffé de fautes et qu'il est illisible, c'est que tu confonds "=" avec "==".

Reply

Marsh Posté le 11-06-2008 à 17:00:47    

c est sous l effet dela rapitide que j ai commis ces faute sinon il fonctione chez moi et je n ai que la premiere lette (R) et j aimerais avoir Ra3

Reply

Marsh Posté le 11-06-2008 à 17:02:52    

printf("RA3" );
 
en une ligne [:dawa]


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
Reply

Marsh Posté le 11-06-2008 à 17:04:12    

Donc si je résume, tu as recopié à la main comme un malpropre un code foireux, parce que tu es pressé, au lieu de faire un copier-coller. J'ai bon ?

 

À priori c'est juste ton type de retour qui n'est pas bon, tu ne renvoies qu'un char donc tu n'as qu'un caractère. Mais vu le bordel que c'est depuis tout à l'heure, j'voudrais être sûr que t'as pas commis d'autres erreurs.
Fais un copier-coller de ton code qu'on y voie plus clair.


Message édité par Elmoricq le 11-06-2008 à 17:04:28
Reply

Marsh Posté le 11-06-2008 à 17:15:53    

je taravaille sur mon Laptop qui n est pas connecter a internet et je n ai pas de USB pour copier. voici le code sans faute
char adresse= 0x45;  
char PORT[4]={'0x12','0x14','0x45','0x52'}  
char Pass[4]={'RA1','Ra2','RA3','Ra4'}  
 
char trouver( char addresse)  
{  
int i=0;  
int a=0;  
for (i=0;i<3;i++)  
{  
  if(Port[i]=adresse)  
{  
  a=i;  
}  
}  
return Pass[a];  
}  

Reply

Marsh Posté le 11-06-2008 à 17:22:25    

et ca compile ca [:petrus dei]


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
Reply

Marsh Posté le 11-06-2008 à 17:23:05    

S'il est recopié sans faute, alors toutes mes remarques ci-dessus sont valides, ainsi que plusieurs autres :

  • char PORT[4] = {'0x12', ... => sans les apostrophes, tes valeurs.  
  • "char Pass[4] = {'RA1', ..." => Non. "RA1" est une chaîne de caractères, donc un "const char *", et non un char tout seul. Le tableau "Pass" doit donc être de type "const char * Pass[4]" (ou const char * Pass[] vu que tu l'initialises à la volée)
  • char trouver(char addresse) => tu n'utilises jamais le paramètre "addresse", à la place tu utilises la variable globale "adresse". C'est moche et probablement faux.
  • for (i=0;i<3;i++)  => Non. Ta boucle va tourner sur les valeurs de 0 à 2 inclus, donc tu vas "oublier" la dernière valeur de ton tableau "PORT".
  • if(Port[i]=adresse)   => Faux. Tu confonds "=" et "==".
  • if(Port[i]=adresse)   => Uh ? Elle s'appelait pas "PORT" ta variable ?
  • return Pass[a];   => comme vu précédemment, ce qu'est censé contenir le tableau "Pass", ce sont des const char *. Or ta fonction retourne un "char".

Reply

Marsh Posté le 11-06-2008 à 17:23:05   

Reply

Marsh Posté le 11-06-2008 à 17:25:11    

mIRROR a écrit :

et ca compile ca [:petrus dei]

 

Surement pas.

 

Juste pour le fun :

$ gcc -Wall taiste.c
taiste.c:3:15: warning: multi-character character constant
taiste.c:3: warning: overflow in implicit constant conversion
taiste.c:3:22: warning: multi-character character constant
taiste.c:3: warning: overflow in implicit constant conversion
taiste.c:3:29: warning: multi-character character constant
taiste.c:3: warning: overflow in implicit constant conversion
taiste.c:3:36: warning: multi-character character constant
taiste.c:3: warning: overflow in implicit constant conversion
taiste.c:4: error: parse error before "char"
taiste.c:4:15: warning: multi-character character constant
taiste.c:4:21: warning: multi-character character constant
taiste.c:4:27: warning: multi-character character constant
taiste.c:4:33: warning: multi-character character constant
taiste.c: In function `trouver':
taiste.c:12: error: `Port' undeclared (first use in this function)
taiste.c:12: error: (Each undeclared identifier is reported only once
taiste.c:12: error: for each function it appears in.)
taiste.c:17: error: `Pass' undeclared (first use in this function)

Message cité 1 fois
Message édité par Elmoricq le 11-06-2008 à 17:25:20
Reply

Marsh Posté le 11-06-2008 à 17:40:04    

Elmoricq a écrit :


 
Surement pas.
 
Juste pour le fun :


 
je sais :D
mais j ai encore du mal a comprendre quelques trucs
si je fous

Code :
  1. const char* Pass[]


 
je me prends un warning sur le type de retour
mais si je declare

Code :
  1. char Pass[4][4]


j ai plus d erreur mais je trouve ca crade et pas flexible


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
Reply

Marsh Posté le 11-06-2008 à 17:44:15    

u08 FKT[22]="0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16";
//Eingänge PORTA und PORTB von 0x40 für RA0 bis 0x4F für RB7
//Ausgänge PORTC(außer RC6 und RC7), PORTD und PORTE(RE0 und RE1) von 0x60 für RC0 bis 0x6F für RE1
char adress=0x42;
const char PORT[16]={"0x40","0x41","0x42","0x43","0x44","0x45","0x46","0x47","0x48","0x49","0x4A","0x4B","0x4C","0x4D","0x4E","0x4F"};
const char Pass[16]={"RA0","A1","RA2","RA3","RA4","RA5","RA6","RA7","RB0","RB1","RB2","RB3","RB4","RB5","RB6","RB7"};
 
 
char FindPort(char adress)
{
 int i=0;
 int a=0;
 u08 c=0;
 for(i=0;i<=16;i++)
 {
 
 if(PORT[i]==adress)
   a=i;
 }
 
return (Pass[a]);
}
jaimerais avoir le resultat RA2

Reply

Marsh Posté le 12-06-2008 à 12:38:07    

1) Si PORT[16] est bien un tableau de char, il faut elever les "
2) C'est char *Pass[16], pas char Pass[16].
3) De même FincPort doit retourner un char *, pas un char
4) Tes tableaux ont 16 éléments, les indices vont donc de 0 à 15. Si tu list la case 16 ça va pas aller.


Message édité par matafan le 12-06-2008 à 12:38:38
Reply

Marsh Posté le 12-06-2008 à 12:42:33    

z'en avez du courage les gens. Soit le type a un problème de syntaxe et à ce moment là, il expose clairement la ligne qui ne va pas, soit ça n'est pas un problème de syntaxe et il donne un programme qui compile. La ce programme y a 4 photes par ligne, c'est un programme jamais compilé, tapé dans word.


Message édité par Taz le 12-06-2008 à 12:42:39
Reply

Marsh Posté le 12-06-2008 à 13:23:50    

Mon courage a des limites, j'ai abandonné depuis mon dernier post.
 
raoul11 > Ce qu'il te faut à ce stade, plus qu'une solution à ton problème, c'est étudier un vrai cours de C. Je te propose d'acheter un livre : "Le Langage C", de Kernighan et Ritchie.

Reply

Marsh Posté le 12-06-2008 à 13:47:59    

je compte le faire. merci tout de meme por votre aide. serait il possible de retourner un string, si oui comment le definir. j ai avancer d un pas grace a matafan.

Reply

Marsh Posté le 12-06-2008 à 13:48:54    

Y a pas de string en C. Pas de chaînes de caractères, ça n'existe pas.
 
Ce sont des tableaux de caractères, et il faut donc que tu en retournes l'adresse via un pointeur (de type char* donc).

Reply

Sujets relatifs:

Leave a Replay

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