1

Est-ce qu'on peut utiliser des listes en C ?
Si oui, comment ?

2

heu oui smile

const unsigned char prout[] = "Salut ";

voici une liste constante ...

et char *prout est un pointeur, soit une liste à allouer pour y mettre ce que tu veux!
par exemple:

const unsigned char prout[] = "Hello ";
unsigned char *bonjour = NULL;
bonjour = malloc((strlen(prout) + 5)*sizeof(unsigned char));
sprintf(bonjour, "%sWORLD !!",prout);
free(bonjour);


bonjour est donc une liste, enfin, j'espere que c le sens dont tu l'entends, pis vala comment allouer et desalouer (si tu desalloue pas, fuite de mem ..)

3

Heu...
En fait je parlai des listes comme en TI-Basic avec { qqch , " autre chose ", etc}

4

Va lire un tuto sur le C avant de poser ce genre de questions !

Le C permet d'utiliser des listes (plutôt appelées tableaux à une dimension).
Mais ces listes sont différentes de celles que tu as l'habitude d'utiliser en BASIC.
Je te conseille d'aller sur www.codeur.org et de chercher des tutoriaux sur le C.

5

On peut aussi utiliser les listes TI-BASIC en C sur TI-89/92+/V200. Ascur, tu veux en faire quoi? Les lire? Les modifier? Rajouter/supprimer des éléments?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

En fait, je voudrais créer une liste, mettre des valeurs dans celle-ci, modifier ces valeurs, agrandir la liste, afficher les valeurs de celle-ci.
Merci

7

He bien alors la réponse de Jackiechan convient parfaitement. Ce genre de question porte sur les bases du C, et ça a sa réponse dans n'importe quelle documentation digne de ce nom.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

* créer un tableau en C: int *l=malloc(12*sizeof(int));
* mettre des valeurs dans le tableau en C: [i]int i; for(i=0;i<12;i++) l=i;
* agrandir le tableau: l=realloc(l,123);
* afficher les valeurs: [i]for(i=0;i<123;i++) {printf("%d",l);ngetchx();}
* Avant de quitter le programme, il faudra détruire le tableau: free(l);.

Tu peux aussi faire ces mêmes opérations sur une liste TI-BASIC, mais c'est plus compliqué (et plus lent).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

Merci

10

Comment récupérer une liste passée en argument et utiliser celle-ci ?

11

avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

...et quel est l'équivalent en C de dim(liste) du TI-Basic ?

13

Y'a pas, tu peux utiliser l'astuce "sizeof(liste)/sizeof(liste[0])", c'est à dire diviser la taille de la liste par la taille d'un element.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

14

il veut la ongueur d'une liste TI-basic, non ?

parce que la longeur d'une liste C, tu la connais forcément, vu que c toi qui la fixe...
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

15

Bah non, si tu la malloc, dans certains cas tu ne connais pas sa taille. Je me suis déjà retrouvé dans ce cas.

Et puis de toute façon sa liste Ti-Basic il va la stoquer dans un tableau en C, donc il aura besoin de calculer la taille de CE tableau.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

16

Hé, dans une liste TI-Basic, les éléments n'ont pas tous la même taille!
Ils sont stockes dans la EStack comme des paramètres, juste entourés d'un LIST_TAG et d'un END_TAG!
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

17

J'ai suffisement manipulé des listes TiOS / C avec Vertel pour savoir ça quand même roll

Mais il va probablement stoquer les valeurs dans une (ou deux) listes : short ou long, et char. Donc l'astuce marche.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

18

Non.
Ça va lui donner la taille réservée pour le tableau si c'est un tableau de taille fixe, ou alors n'importe quoi si c'est un tableau alloué dynamiquement avec malloc, mais en tout cas pas le vrai nombre d'éléments. Ce qu'il veut, c'est probablement top_estack--; (pour sauter le LIST_TAG), suivi de ArgCount().
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

19

Pourqui cette fonction renvoie - t - elle une liste de chiffres et pas les noms des répertoires ??
void _main(void)
{
ESI argptr;
SYM_ENTRY *sym;
ESI argument;
char *ptr;
int *liste = malloc(sizeof(int));
short i;
unsigned short arg;

SYM_ENTRY *SymPtr = SymFindFirst(NULL,4);// début de la recherche des repertoires de la TI
push_END_TAG();
while(SymPtr)
{
push_ANSI_string(SymPtr->name);
SymPtr = SymFindNext();
}
push_LIST_TAG();// renvoie la liste contenant les repertoires de la TI

argptr = top_estack;
arg = remaining_element_count(argptr);
*liste = realloc(liste,arg*sizeof(int));
liste[1] = top_estack;
for(i=2;i<arg;i++)
{
liste[i] = next_expression_index((ESI*)liste[i-1]);
}
clrscr();
for(i=0;i<123;i++)
{
printf("%d",liste[i]);

}
ngetchx();
}

20

Parce que ton tableau C est un tableau d'entiers. Il te faut un tableau de chaînes de caractères:
[i]char **liste = malloc(sizeof(char *));
...
liste /* pas *liste !!! */ = realloc(liste,arg*sizeof(char *));
...
for(i=0;i<arg;i++)
{
printf("%s",liste);
}
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

21

Compile ca
ESI argptr;
SYM_ENTRY *sym;
ESI argument;
char *ptr;
int *liste = malloc(sizeof(char *));
short i;
unsigned short arg;

SYM_ENTRY *SymPtr = SymFindFirst(NULL,4);// début de la recherche des repertoires de la TI
push_END_TAG();
while(SymPtr)
{
push_ANSI_string(SymPtr->name);
SymPtr = SymFindNext();
}
push_LIST_TAG();// renvoie la liste contenant les repertoires de la TI

argptr = top_estack;
arg = remaining_element_count(argptr);
liste = realloc(liste,arg*sizeof(char *));
liste[1] = top_estack;
for(i=2;i<arg;i++)
{
liste[i] = next_expression_index((ESI*)liste[i-1]);
}
clrscr();
for(i=0;i<123;i++)
{
printf("%s",(char*)liste[i]);

}
ngetchx();
et essaye plusieurs fois...
ca ne fait pas ce que je veux c'et à dire afficher la liste des repertoires ???

22

Tu sais lire? roll

J'ai écrit:
char **liste = malloc(sizeof(char *));
Toi, tu as mis:
int *liste = malloc(sizeof(char *));
C'est normal que ça ne marche pas. Contrairement au BASIC, en C, le type de la variable est très important!

C'est aussi pour ça que GCC a dû te renvoyer un warning pour [i]printf("%s",liste);, que tu as essayé de supprimer par un transtypage incorrect au lieu de corriger le problème à sa source (le type de liste n'est pas bon).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité