Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » [solved] va_arg... (5 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
barraq Ecrit le: Mercredi 13 juillet 2005 à 09:21 Déconnecté(e)    Voir le profil de barraq Envoyer un email à barraq Visiter le site WEB de barraq Envoyer un message privé à barraq  

Salut,

Voila je suis en train de faire une fonction :

short OpenMenu(int Mx, int My, int Mh, int sel, unsigned char *title,...)
{
va_list argptr; // Pointer to the passed arguments
HANDLE handle; // Handle to the menu
char *p; // Pointer to argument in our list
char *str; // Char argument
int i;
short result;

clrscr();

// Point to the argument's list starting after 'litle'
va_start(argptr, title);

//Create the menu
handle = PopupNew(title, Mh);
// Loop on the list of argument until "", to get all the items
i = 0;
while( strcmp((str = va_arg(argptr, char *)), "" ) )
{
PopupAddText(handle, -1, str, ++i);
printf("%s : %d",str,argptr);
printf("%s",-1);
ngetchx();
}

// Then open this menu and return the selected item
result = PopupDo(handle, Mx, My, sel);
HeapFree(handle);
GKeyFlush();
return result;
}

cette fonction ouvre un menu, mais j'ai un probleme, quand j'appele la fonction par exemple :
OpenMenu(-1,-1,-1,2,"Quitter","OUI","NON");
et ben sur mon ecran le menu affiche :

Quitter
1 OUI
2 NON
3 NVyoHi

Enfin voila quoi il m'affiche un item de plus qui est débile... donc cela veut dire que je ne m'arrete pas ou il faut dans le lecture de mes arguments avec va_arg...

Que faire ? une solution :D

( je suis débutant... donc désolé si c'est tout con :( )
-Edité le Mercredi 13 juillet 2005 à 19:12 par barraq-
Ne perdez pas votre vie a la gagner !
    
./Post n°1   Marquer comme non lu.
Link Ecrit le: Mercredi 13 juillet 2005 à 11:30 Déconnecté(e)    Voir le profil de Link Envoyer un email à Link Visiter le site WEB de Link Envoyer un message privé à Link  

1) Euh.. C'est quoi, printf("%s", -1 ) ???
2) C'est marqué dans le source, tu dois appeler la fonction avec OpenMenu(-1,-1,-1,2,"Quitter","OUI","NON", ""); <-- Tu termines par une chaine vide, c'est ce que la boucle teste
    
./Post n°2   Marquer comme non lu.
barraq Ecrit le: Mercredi 13 juillet 2005 à 13:35 Déconnecté(e)    Voir le profil de barraq Envoyer un email à barraq Visiter le site WEB de barraq Envoyer un message privé à barraq  

Le truc printf("%s",-1) c'est juste un truc inutile :D
Bon dans ma fonction justement je ne veux pas avoir besoin d'un argument vide (eg "") pour savoir que la liste d'argument est terminer.
Je sais que normalement va_arg retourne -1 quand la liste d'argument est vide, mais le truc est que cela marche quand on utilise :

va_arg(argptr, int)

mais ne marche pas quand on utilise le type

va_arg(argptr, char *)

donc je suis bloqué....
se qui est étrange est que la foncion marche, mais affiche un item de plus !! donc le test dans le while marche mais pas au bon moment.... si qqun sais se que le dernier item represent cela serai super !!!

des idées ??

_________________________________________
>> 2) C'est marqué dans le source, tu dois appeler la fonction avec OpenMenu(-1,-1,-1,2,"Quitter","OUI","NON", ""); <-- Tu termines par une chaine vide, c'est ce que la boucle teste

c'est moi qui la fait la fonction....
Ne perdez pas votre vie a la gagner !
    
./Post n°3   Marquer comme non lu.
Link Ecrit le: Mercredi 13 juillet 2005 à 16:44 Déconnecté(e)    Voir le profil de Link Envoyer un email à Link Visiter le site WEB de Link Envoyer un message privé à Link  

C'est pas marqué dans la doc, ce que renvoit va_arg pour un pointeur ? 0xFFFFFFFF ? NULL ?

Je ne sais pas du tout comment marche va_arg (surtout que ça change d'une plateforme à l'autre) mais sur PC (windows), va_arg n'a absolument AUCUN moyen de savoir un argument est le dernier ou non!

A mon avis, Tu n'as pas le choix: Tu devras soit passer en paramètre le nombre d'arguments (printf() fait pareil, indirectement) ou terminer par un argument vide (chaine vide ou pointeur NULL)...
    
./Post n°4   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 13 juillet 2005 à 17:59 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Link :
Je ne sais pas du tout comment marche va_arg (surtout que ça change d'une plateforme à l'autre) mais sur PC (windows), va_arg n'a absolument AUCUN moyen de savoir un argument est le dernier ou non!

Idem pour TIGCC.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°5   Marquer comme non lu.
barraq Ecrit le: Mercredi 13 juillet 2005 à 19:11 Déconnecté(e)    Voir le profil de barraq Envoyer un email à barraq Visiter le site WEB de barraq Envoyer un message privé à barraq  

Oui je crois que la seul solution est bien de donner une indication de fin, donc ici de mettre un "" #ouin#

bon ben #merci# quand meme ;)
Ne perdez pas votre vie a la gagner !
    
  :: Index » Forum Ti68K » Programmation C » [solved] va_arg... (5 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 47.48ms avec 18 requetes