aze Le 17/08/2007 à 23:17 attention, ne confonds pas "\0" qui est une chaine de caractères (et donc un tableau de 2 char qui valent tous les deux '\0' ) et '\0' qui est un nombre de type char qui vaut 0
il faut donce écrire *fill = '\0'; ou *fill = 0;
( par contre je sais pas pourquoi *fill = \0; sans quote marche, le compilateur ignore le \ ?)
edit: cross
RiRi Le 18/08/2007 à 13:09 C'est pourtant pas bien compliqué, mais il suffit juste de le savoir.
RiRi Le 19/08/2007 à 00:19 Rah j'y suis presque, plus qu'un bug à la con qui traine, mais ce soir vu mon état de fatigue, je ne sais pas si je vais le trouver...
RiRi Le 19/08/2007 à 00:41 Cool problème résolu, il suffisait d'utiliser des unsigned char.
Sinon j'ai encore un warning qui me soule et que je ne comprend pas:
Voilà le warning :
'buffer' may be used uninitialized in this function
et pourtant voilà ce que je fais avant toute utilisation de buffer :
if(!(buffer = malloc(strlen(message)+1)))
goto fin; //Quitte si on ne peut allouer de mémoire pour le buffer de transcription
Que faut'il faire pour que le compilateur comprenne miex où alors que fais-je mal?
Merci de vos suggestion
on peut avoir le code de la fonction ?
Jyaif Le 19/08/2007 à 13:42 tu peux toujours faire:
unsigned char *buffer = buffer;
ça vire le warning je crois.
Attention, c'est une extension GCC, ça.
RHJPP Le 19/08/2007 à 23:24 Bah, pour qu'il n'y ait pas de risque que buffer ne soit pas initialisé, il faut l'initialiser...
unsigned char *buffer = NULL;
Ah oui faut penser à utiliser des constantes à la place des "Nombres magiques". Genre 13 = KEY_ENTER, 264 = KEY_ESC...
Et comme le dit Thepro, toujours intialiser les pointeurs. (Rien de pire que de débugger un programme avec un pointeur invalide).
Bah, les deux ne sont pas indispensables si on sait ce qu'on fait (en revanche, les KEY_ sont une bonne habitude à prendre parce que certains sont des pseudo-constantes, donc il est important de ne pas coder la valeur TI-89 en dur pour la portabilité TI-92+/V200 ou l'inverse).
RiRi Le 23/08/2007 à 14:23 Je ne suis pas actuellement chez moi, mais je posterai sans doute le code de la fonction.
C'est une fonction qui permet de résoudre facilement plusieurs énigmes de codegame, celles par déplacement de caractère dans l'alphabet.
Si CarEntre est une lettre majuscule, le code qui est dans les accolades du if n'est pas exécuté, je pense que là dessus nous sommes d'accord.
Si on imagine que le test qui est dans les parenthèses du if est évalué en totalité, la lecture de CarLibre[CarEntre - 97] n'a pas de raison de planter le programme. Il ne s'agit que d'une lecture et sur TI il n'y a pas de MMU.
Le bug est certainement ailleurs et donc le plantage n'indique pas que l'expression est évaluée dans sa totalité.

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
RHJPP Le 28/10/2007 à 10:44 Jonasb, il ne faut pas utiliser de constante littérale comme ça, il faut plutôt écrire :
if (CarEntre >= 'a' && CarEntre <= 'z' && CarLibre[CarEntre - 'a'])
L'opérateur && est évalué en court-circuit, le dernier test n'a même pas lieu pour une majuscule parce que déjà le premier échoue.
Ca a été dit plusieurs fois dans ce topic Kevin hein...

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.