Connexion
Vous n'avez pas encore de compte personnel ? Vous devriez en créer un. Une fois enregistré vous aurez certains avantages, comme pouvoir modifier l'aspect du site, ou poster des commentaires signés...
Support
Activité du Site

Pages vues depuis 06/01/2019 : 13 087 308

  • Nb. de membres 366
  • Nb. d'articles 2 843
  • Nb. de forums 24
  • Nb. de sujets 13
  • Nb. de critiques 0

Top 10  Statistiques

Index du forum »»  Développement »» [Résolu] - Programmation en C sur Morphos 2.1

[Résolu] - Programmation en C sur Morphos 2.1#97

5Contributeur(s)
pierrepPapiosaurscreetchfrost242Yomgui
2 Modérateur(s)
PapiosaurBeWorld
pierrep pierrepicon_post
j'ai écris un programme pour insérer des + entre les nombres d'une liste
Ce programme fonctionne si je mets des printf pour regarder ce qui se passe et il plante si je les enlève
Avec deux nombres j'avais résolu le problème en mettant une instruction bidon à la place d'un des printf
Avec trois il a fallu ajouter une deuxième instruction bidon
et avec quatre il ne marche qu'avec un printf que je n'arrive pas à remplacer par une instruction bidon n'affichant rien à l'écran

Voici le texte de ce programme :

#!!include!!

#define num1(x) (x == '0' || x == '1' || x == '2' || x == '3' )
#define num2(x) (num1(x) || x == '4' || x == '5' || x == '6' )
#define nombre(x) (num2(x) || x == '7' || x == '8' || x == '9' )
int pos = 0;

short SauteBlancs(char *entree, short posi) {

posi += strspn (entree + posi," ");
return(posi);
}

char * somme(char *donnee)
{
char *result,*bid1,*bid2,*bid3;
short l,debut;
BOOL fin=FALSE;
result = (char *)malloc(80);
result = "";
do
{
pos=SauteBlancs(donnee,pos);
debut=pos;
bid1 = "";
if (!nombre(*(donnee + pos)))
{
fin=TRUE;
}
else
{
pos ++;
while (nombre(*(donnee + pos))) pos++;
l = pos - debut; /* L : longueur du nombre */
bid1 = (char *)strncat(result,donnee + debut,l);
printf("result1 : %s \n",result);
/*sprintf(bid3,"%d",2);*/
sprintf(bid2,"%s",""); /* instruction bidon sans laquelle ça plante !! */
bid1 = (char *)strcat(result," + "); /* on ajoute un + Ã la suite */
/*printf("result2 : %s \n",result);*/
sprintf(bid2,"%s","");
}
}
while (!fin);
free(bid1);
free(bid2);
free(bid3);
result[strlen(result)-2] = '\0'; /* on enleve le + en trop */
return(result);
}

int main()
{
char *entree=" 1 2 3 4";
printf("resultat : %s\n",somme(entree));
}

Quelqu'un peut-il me dépanner ?
Merci

Message édité par : Papiosaur / 20-12-2008 19:36

Papiosaur Papiosauricon_post
Salut Pierrep ;-)

J'aimerai pouvoir te filer un coup de main, il va falloir que je m'y mette !!! :-D
screetch screetchicon_post
ça compile ?
-----------------
Screetch
http://boisdron.com


Message édité par : Papiosaur / 13-12-2008 17:55

frost242 frost242icon_post
result = (char *)malloc(80);
result = "";

Il y a un truc qui ne va pas. Tu ne manipule pas un pointeur comme une vulgaire variable, le C ce n'est pas du Basic.
Vois du côté de memset pour initialiser ton espace mémoire.

Je ne suis pas allé plus loin, mais révise tes pointeurs avant d'aller plus loin.

pierrep pierrepicon_post
merci, j'ai remplacé
result=""; par memset(result,'\0',1);
et tout marche impeccable :-P

Message édité par : Papiosaur / 13-12-2008 17:55

frost242 frost242icon_post
Bien ;-)
Yomgui Yomguiicon_post
Même remarque que Screetch: "ça compile???"

Plus sérieusement, faire un copier coller de code C dans un forum c'est pas bien vu car le rendu est très aléatoire, suivant la façon dont le forum va te reformater ton texte.

Ici il vaut mieux utiliser encapsuler ton code avec les balises
 et 

pour qu'il reste un code C.
--

http://blog.yomgui.fr/
http://www.yomgui.fr/yiki/doku.php
http://www.yomgui.fr/bugtracker