IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probleme dans ma fonction en c


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut Probleme dans ma fonction en c
    Bonjour a tous le monde je suis debutant dans la programmation je suis en 1er bts informatique gestion je code en turbo c.
    Je veux faire une petite application ou on definit 2 chaine de caracteres ayant le meme nombre de lettre exemple: bonjour,sexbomb et en ressortir bsoenxjbooumrb
    *|*|*|*|*|*|*|

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include<conio.h>
    char melange(char texte1[8],char texte2[8]);
    main()
    	{
    	char phrase1[8]={"bonjour"};
    	char phrase2[8]={"sexbomb"};
    	char phrase[16];
    	int i;
    	clrscr();
     
    	for(i=0;phrase1[i]!=0;i++)
    	printf("%c",phrase1[i]);
    	printf("\n");
    	for(i=0;phrase2[i]!=0;i++)
    	printf("%c",phrase2[i]);
    	phrase=melange(phrase1,phrase2);
     
    	getch();
    	}
    	char melange(char texte1[8],char texte2[8])
    	{
    	char phrase[16];
    	int i;
    	int j;
    	do
    	{
    	for(i=0;texte1[i]!=0;i++)
    		{
    		for(i=0;texte2[i]!=0;i++)
    			phrase[i]=texte1[i];
    			j=i+1;
    			phrase[j]=texte2[i];
     
    		}
     
    	}while(texte1[i]!=0 || texte2[i]!=0);
    	for(i=0;phrase[i]!=0;i++)
    	{
    	printf("%c",phrase[i]);
    	}
    	return(phrase);
     
     
     
     
     
    	}
    J ai un message d erreur lvalue requiered in function main
    Non portable pointer conversion in fonction melange

    Si quelle qu 'un a une aide a me proposé
    merci d'avance

    ps:je suis débutant

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Dans la fonction main(), phrase est un tableau. Il n'est donc pas possible d'ecrire phrase=...

    En outre dans melange(), phrase est un tableau local il n'est donc pas possible de le retourner (car il est detruit a la fin de la fonction). De plus melange() est censee retourner un char or toi tu cherches a renvoyer une chaine de caractere donc char*.

    Plusieurs solutions sont possibles:
    - Lors de l'appel a melange(), tu lui fournit le tableau devant contenir la chaine resultante (ainsi que la taille maw pour gerer les debordements de buffer). La fonction melange() travaille alors dans ce tableau.
    - La fonction melange alloue la memoire necessaire avec malloc() et retourne l'adresse de cette zone.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    okmerci pour ta reponse je vais essayé dans le sens la meme si je suis pas sur d avoir tout compris

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    Dans la fonction main(), phrase est un tableau. Il n'est donc pas possible d'ecrire phrase=... j ai pas mis phrase= mais phrase[i]=

    la chaine chaine resultante c est phrase[16]

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par jacko842
    Dans la fonction main(), phrase est un tableau. Il n'est donc pas possible d'ecrire phrase=... j ai pas mis phrase= mais phrase[i]=
    Si ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    phrase=melange(phrase1,phrase2);

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    ok

  7. #7
    Membre actif
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Points : 207
    Points
    207
    Par défaut
    salut,
    j'ai pas lu tout le code mais si tu veux faire un melange de deux chaines je vois que ce petit bout de code est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(i=0,j=0;i<=8;i++)
    {
    phrase[j]=phrase1[i];
    j++;
    phrase[j]=phrase2[i];
    j++;}
    une question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=0;phrase1[i]!=0;i++)
    for(initialisation;condition de continuité, modification)
    tu veux dire quoi par phrase1[i]!=0??

    a+

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par ranell
    tu veux dire quoi par phrase1[i]!=0??
    Ca signifie que le caractere est different de 0 (ou '\0') et donc que la fin de la chaine n'a pas ete atteint.

  9. #9
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Hello,

    Citation Envoyé par ranell
    salut,
    j'ai pas lu tout le code mais si tu veux faire un melange de deux chaines je vois que ce petit bout de code est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(i=0,j=0;i<=8;i++)
    {
    phrase[j]=phrase1[i];
    j++;
    phrase[j]=phrase2[i];
    j++;}
    Attention, i<8 pour la condition d'arret. Et pour être encore plus succint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <stdio.h>
     
    int main(void) {
     
      int i, j;
      char const * const phrase1 = "hlowrd";
      char const * const phrase2 = "el ol";
      char phrase[12];
     
      for (i=0, j=0; i<6; ++i, j+=2) {
        phrase[j]= phrase1[i];
        phrase[j+1]= phrase2[i];
      }
     
      puts(phrase);
     
      return 0;
    }
    Citation Envoyé par ranell

    une question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=0;phrase1[i]!=0;i++)
    for(initialisation;condition de continuité, modification)
    tu veux dire quoi par phrase1[i]!=0??

    a+
    Cela pourrait s'écrire phrase1[i] != '\0'. En fait, plutôt que de se baser sur la longueur de la chaine, il cherche le caractère terminateur de chaine, ce qui est bien. C'est même indispensable de controler cela avec deux chaines sources à fusionner de longeurs différentes (lg chaine1 > lg chaine2 + 1 ou l'inverse).

    A+

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    merci pour vos reponses

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jacko842
    Bonjour a tous le monde je suis debutant dans la programmation je suis en 1er bts informatique gestion je code en turbo c.
    <...>
    ps:je suis débutant
    Alors tu vas relire d'urgence ton cours sur les chaines, parce que là, tu fais n'importe quoi. Je rappelle qu'une chaine est terminée par un 0 et que celui-ci occupe la place d'un caractère.

    D'autre part, pour créer dynamiquement un tableau, on peut utiliser malloc().

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    a la fin ca donne ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include<stdio.h>
    main()
    	{
    	char phrase1[7]={"hlowrd"};
    	char phrase2[6]={"el ol"};
    	char phrase[13];
    	int i,j;
    	char melange(char phrase1[7],char phrase2[6]);
    	clrscr();
     
    	melange(phrase1,phrase2);
     
     
    	 getch();
    	}
    	char melange(char texte1[7],char texte2[6])
    	{
    	 int i,j;
    	 char phrase[13];
     
    	 for(i=0,j=0;i<7;i++,j+=2)
    		{
    		phrase[j]=texte1[i];
    		phrase[j+1]=texte2[i];
     
    		}
     
    		return(puts(phrase));
     
     
    	}
    ps:le caractère nul (code ASCII 0) indiquant la fin de la chaîne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] fonction xhr.onreadystatechange
    Par dimainfo dans le forum AJAX
    Réponses: 1
    Dernier message: 28/05/2009, 14h59
  2. probleme dans une fonction qui affiche le nombre de ligne du texte
    Par étoile de mer dans le forum Débuter
    Réponses: 7
    Dernier message: 19/09/2008, 08h25
  3. probleme dans deux fonctions
    Par gadalla dans le forum Delphi
    Réponses: 1
    Dernier message: 14/07/2007, 03h27
  4. Probleme dans une fonction de test
    Par blondelle dans le forum C++Builder
    Réponses: 6
    Dernier message: 25/01/2007, 19h07
  5. Probleme dans une fonction
    Par Leroimage dans le forum Langage
    Réponses: 10
    Dernier message: 22/02/2006, 19h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo