CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

fonction avec une chaine de caract

Le_sims01
Le_sims01
Niveau 10
26 mars 2005 à 18:21:27

salut, quelqun peut me dire pourquoi mon code marche pas

  1. include < stdio.h>
  2. include < conio.h>
  3. include < conio.c>

char mot[20];
char mot2[20];
int x, y, i;
char poub;

char melangemot ( char param[20])
{
for ( i=0; i<21; i++)
mot2[i] = param[i];
return ( mot2);
}

void main()
{
scanf ( "%s", &);
printf ( "%s", melangemot ( mot));
getch();
}

merci

dnob700
dnob700
Niveau 10
26 mars 2005 à 18:25:20

mot est un pointeur.

mot[1] est une variable char, mais mot tout court c´est un pointeur vers mot[0] donc pas besoin de & devant mot dans l´appel à scanf.

tu fait juste :
scanf("%s",mot);

Le_sims01
Le_sims01
Niveau 10
26 mars 2005 à 18:30:48

merci pour la reponce mais ça ne marche toujours pas,

je vois pas pourquoi tu parles de pointeur car j´en ai pas. J´ai juste faire une fonction qui me retourne le meme resultat.

j´y arrive avec du int mais ça ne passe pas avec du char.

Le_sims01
Le_sims01
Niveau 10
26 mars 2005 à 18:50:47

c´est bon j´ai trouver en cherchant un peu sur internet, bizarrement il fallai mettre ça pour déclarer la fonction.

int melangemot ( char *param)

je comprend pas trop pourquoi.

:gne:

paradox-
paradox-
Niveau 6
26 mars 2005 à 21:33:05

Bah revois ton cours de C++ alors, c´est pas au point..

Le_sims01
Le_sims01
Niveau 10
27 mars 2005 à 00:24:43

paradox-

je t´emmerde

dnob700
dnob700
Niveau 10
27 mars 2005 à 00:28:56

le sims, effectivement tu nous emmerde.

tu ne sais même pas ce qu´est un pointeur, alors ne te permet pas d´insulter ceux qui eux le savent

achdezo
achdezo
Niveau 10
27 mars 2005 à 13:18:40

Excusez moi - y´a pas quelqu´un qui pourrait quand même expliquer aux noobs pourquoi ça marche bien comme ça ?

dnob700
dnob700
Niveau 10
27 mars 2005 à 15:07:58

normalelment ça devrait marcher avec l´autre syntaxe aussi.

surtout que là les variables sont globale donc il n´y a même pas besoin de les passer en paramètre, ça devrait marcher tout seul.

achdezo
achdezo
Niveau 10
27 mars 2005 à 15:29:32

Oui mais pourquoi ça marche quand on fout un int ?

dnob700
dnob700
Niveau 10
27 mars 2005 à 19:01:27

ah bien sûr, j´ai pas fat gaffe, j´ai vu le ( char param[20] qui s´est transformé en char *param et j´ai pas vu le int.

en gros comme tu viens de la découvrir, char param[20] et char *param c´est à peu près la même chose car dans les deux cas param est un pointeur vers un char.

donc quand tu déclare char mot2[20] mot2 n´est pas un char, mais un char* c´est à dire un pointeur vers un char.

or un char fait un octet alors qu´un pointeur en fait 4. Et justement le type int fait 4 octets aussi.

Donc le compilo ne peut pas faire le :
return mot2;
car il essai de mettre dans un truc qui fait un octet ( le type de la fonction) une donnée qui en fait 4.
Par cotnre quand le type est int il y arrive.
Par contre, il doit sacrément ralé, car non seulement il ne doit pas aimer que tu utilise un int pour renvoyer un char* ( il faudrait déclarer la fonction :
char* melangemot(char param[20]) pour que se soit propre.
Mais en plus dans le printf, c´est pas trrible, même si là il ne fait pas de warning car il ne peut pas deviner que ce que tu lui donne n´est pas réellement un int.
Par contre avec cout, ça serait pas passé, et il t´aurait affiché un numéro bizarre au lieu de ta chaine de caractères.

stormseedle
stormseedle
Niveau 8
27 mars 2005 à 19:50:14

porquoi tu met des parametres a tes fonctions alors que tu utilises des horribles variable globales ?
n´utilisent ques des variable locales enfin c´est un conseil, dans ton cas elles ne servent a rien a part a rendre le programme moins lisible
pour ce qui est des pointeurs, ca ne se devine pas :
une donnee est un couple : la valeur et l´adresse
en gros cette adresse c´est le pointeur.

stormseedle
stormseedle
Niveau 8
27 mars 2005 à 20:22:20
  1. include < stdio.h>
  2. include < string.h>

/ *
voila un petit corrige de ton code,
je programme en C mais je pense que le C++
est assez proche

  • /

void melangemot ( char newcchaine, []char oldchaine[])
/ *
le tableau est passe par adresse par defaut, donc pas besoin de le retourner a la fin la valeur sera modifie

  • /

{
int i;//variable locale ( jsute ds la fonction)
for ( i=0; i<21; i++)
newchaine[i]=oldchaine[i];
/ /tu px utliser strcpy qui fait la mm chose
/ /strcpy(newchaine,oldchaine);
}

void main()
{
/ /declaration des deux chaines
char mot1[20],char mot2[20];
/ /tu px aussi les declarer comme cela
/ /char *mot1,*mot2;
/ *mais tu devras allouer un espace memoire a ta
chaine, avec la fonction malloc ( qui est ds stdlib.h)
par exemple tu veux creer un tableau de 20 cases
mot1=(char*)malloc(20*sizeof(char));
et mot1 sera un tableau

  • /

scanf ( " %s", mot1);
melange(mot2,mot1);
printf("La chaine est : %s\n",mot2);
}

j´ai introduit bcp de notion a toi d´analyser le code. je te conseille developpez.com c un bon site
mais ton code ne melange rien du tout et fait un simple copie. Je n´ai pas teste mais mon code doit fonctionner

stormseedle
stormseedle
Niveau 8
27 mars 2005 à 20:46:30

http://www.developpez.com/
tu devrais toute l´aide dont tu as besoin

achdezo
achdezo
Niveau 10
27 mars 2005 à 20:50:32

dnob> Ok merci :) Donc si j´ai bien compris ça marche aussi en mettant char * comme valeur de retour... ça marche.

kufa
kufa
Niveau 9
27 mars 2005 à 20:54:43

le_sims01:

#include < conio.c>

C´est une blague ou faute d´orthographe, n´est-ce pas?

stormseedle
stormseedle
Niveau 8
27 mars 2005 à 20:55:02

pas besoin de retour si tu passes un tableau en parametres et attention aux variable globales =BEURK ( surtt pr les debutants)

stormseedle
stormseedle
Niveau 8
27 mars 2005 à 20:59:09

juste un truc les #include < qquechose.c> ca marche c juste que tu recompile une bib ce qui est completemnt con

dnob700
dnob700
Niveau 10
27 mars 2005 à 21:05:53

storseedle tu compile ça avec un vrai compilo C et il te crache à la gueule.

je ne parle pas de tes fautes de frappes, mais ce que tu écrit est ps vraiment du C, ne serait-ce que les commentaires style C++ qui font hurler un gcc.

stormseedle
stormseedle
Niveau 8
27 mars 2005 à 21:11:31

je compile ca ac gcc et ca passe tanquille
je comment toujours mes prog comme ca en altenant / / et / * siuvant que j´ai besoin de long commentaire ou de cours
et puis ce que j´ai ecrit est du C POSIX c tout.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment