Ou est le probléme dans mon petit programme

Fermé
yacinebosss Messages postés 156 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 - Modifié par yacinebosss le 31/10/2015 à 10:20
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 31 oct. 2015 à 14:16
slt , j'ai pas trouvé le problème dans mon petit programme :

fichier .h :

int main(); \\prototype en plus :)


typedef struct personne personne ;
struct personne

{
char prenom ;
char nom ;





};

fichier .c :
#include <stdio.h>
#include <stdlib.h>

#include "main.h"




int main()
{


char prenomm[]="jean";
char nomm[]="bernard";

personne utilisateur;





utilisateur.prenom = prenomm;
utilisateur.nom = nomm;




printf("Quel est votre nom ? ");
scanf("%s", utilisateur.nom);
printf("Votre prenom ? ");
scanf("%s", utilisateur.prenom);
printf("Vous vous appelez %s %s", utilisateur.prenom, utilisateur.nom);






return 0;
}



je pense que vous comprendré mon programme sans explication :) aidez moi s.v.p il ne marche pas comme je le veux AU FINAL IL DOIT M'AFFICHER CA :

Quel est votre nom ? jean
Votre prenom ? bernard
Vous vous appelez Jean bernard

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
31 oct. 2015 à 10:45
Bonjour,

Pas besoin de déclarer le prototype du main dans ton .h.
Dans ta structure personne, tu déclares nom et prenom comme des simples char au lieu de tableau de char ou pointeur sur char (dans ce cas, ne pas oublier l'allocation).

utilisateur.prenom=prenomm;
Bon uniquement si utilisateur.prenom est de type pointeur sur char.
Mais je pense plutôt que ce que tu veux est un tableau de char dans ta structure utilisateur. Et pour recopier prenomm dans utilisateur.prenom, il faut utiliser : strcpy : strcpy(utilisateur.prenom, prenomm); ou mieux strncpy().

printf("Vous vous appelez %s %s", utilisateur.prenom, utilisateur.nom);
N'oublie pas de mettre un '\n' après ta phrase pou forcer l'affichage avant la fin de ton programme.

Cdlt,
0
yacinebosss Messages postés 156 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 3
31 oct. 2015 à 11:42
c'est la deuxième que j'ecrit ce message :s :

d'abord merci pour t'a réponse. et ensuite j'ai quelque point d'ombre :

_quand tu dit pointeur sur char . les pointeur ca point sur l'adresse d'une variable pour enchanter la valeur n'est ce pas? . aussi quand tu dit ("utilisateur.prenom=prenomm;
Bon uniquement si utilisateur.prenom est de type pointeur sur char")c'est normalement le contraire car ont veux changer la valeur de utilisateur.prenom mais un pointeur ne peux utiliser des chaîne de caractère . non ?

_mais normalent si en fait ca variable = variable les deux variable auront la meme valeur (bien sure si il sont tout les deux des tableau j'ai bien compris ca ), est si ont utilise utilsateur .prenom comme pointeur il faut alors quand fasse (pointeur = une autre variable)
car les pointeur ca ne stock pas les valeur des valeurs des variable mais leur adresse. n'est ce pas ?

_aussi a quoi bon utilisé strcpy si ont peux juste faire un " = " . non ?

_enfin comment \n peut il bien forcer l'affichage ?

bon j'ai fait des modification sur mon programme dans mon fichier .h (mais ca n'a pas marché):

typedef struct personne personne ;
struct personne

{
char prenom [50];
char nom [50];





};

enfin j'ai une question sur les prototype quand je fait ca :

int main();


int choit equation();

int calcule des valeur de Fx();





int main(..............


int choit equation()........

int calcule des valeur de Fx()....


ca ne veux pas ce compilé . ca me dit qu'il y'a une erreur dans les prototype. pk ?


bon je sais que dans mais questions il y'a beaucoup de chose fausse . dsl :(
0
yacinebosss Messages postés 156 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 3
Modifié par yacinebosss le 31/10/2015 à 12:44
aussi j'ai une quetion sur les #define . (je veux que l'utilisateur choisi la fonction (pas a.x+b mais main() ou ...) qu'il veux utilisé)

int main()
{
int choix;


scanf("%s",&choit);

if (choit==1)
{

#define int choir equation()


}

else
{

#define int calcule des valeur de Fx()


}



}




#ifdef int choit equation()

{
printf("quel model de fonction utilisé:");

printf("a.x+b");
printf("a.x.x+b.x+c");





}


#ifdef int calcule des valeur de Fx()

{


printf(".......");






}


et c'est la ou je rencontre le probléme des prototype. et pour les define si c'est pas comme ca qu'on les utilisé c'est juste un test ^^ .
0
yacinebosss Messages postés 156 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 3
Modifié par yacinebosss le 31/10/2015 à 12:49
enfaite c moi qui me trompé sur le rolle que fait mon scanf et maintenant ca marche j'ai juste enlever les deux tableau (nomm et prenom) et ca :utilisateur.prenom = prenomm;
utilisateur.nom = nomm; . bon j'ai une derniére question (je sais je pausse trop de question :) ) mais quand je fait ca: scanf("%s", utilisateur.nom); ou ca :scanf("%s",& utilisateur.nom); c la meme chose. pk ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
31 oct. 2015 à 12:49
quand tu dit pointeur sur char . les pointeur ca point sur l'adresse d'une variable pour enchanter la valeur n'est ce pas?
Oui. Mais tu peux aussi l'utiliser pour stocker des chaînes de caractères. La chaîne ira du 1e caractère jusqu'au caractère final représenté par '\0'. Par exemple : printf("%s", chaine); affichera tous les caractères pointés à partir de l'adresse stockée dans la variable chaine jusqu'au '\0'. (bien pensé à faire de l'allocation. Pa exemple : chaine=malloc(5);

mais normalent si en fait ca variable = variable les deux variable auront la meme valeur (bien sure si il sont tout les deux des tableau j'ai bien compris ca ), est si ont utilise utilsateur .prenom comme pointeur il faut alors quand fasse (pointeur = une autre variable)
car les pointeur ca ne stock pas les valeur des valeurs des variable mais leur adresse. n'est ce pas ?

Sauf que tu ne peux pas utiliser l'opérateur = lorsqu'il s'agit de tableaux...
L'opérateur = permet de recopier un seul type primitif (char, int, ...). Un tableau représente un ensemble de type. Donc, ça ne marchera pas. Dans ce cas, on utilise strcpy() qui recopie tous les caractères jusqu'au '\0'.

enfin comment \n peut il bien forcer l'affichage ?
Car la norme relatif au C le spécifie... Tu peux aussi faire un forçage explicite via : fflush(stdout).

Pour ton programme, je ne l'ai pas lu. Il est incomplet. Poste tout ton code mais merci d'utiliser la balise <code c> lorsque tu postes un code.
Par exemple :
<code c>ici tu mets ton code</code>
Sinon c'est illisible.

Note : je te conseille de lire un tuto car il me semble que bien des notions ne sont pas maîtrisées. Par exemple : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c (au moins partie 1 et partie 2).
0
yacinebosss Messages postés 156 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 3
Modifié par yacinebosss le 31/10/2015 à 13:57
oui je suis le cours. je vais essayé de revoir tous les point que je n'est pas bien compris .

int chaine=0;

      char tableau[3];

      tableau[0]='s';
      tableau[1]='a';
      tableau[2]='b';

     chaine=tableau;


      printf("%s",chaine);



chaine=tableau; ca marche pourquoi mettre chaine=tableau . et en plus j'ai essayé est ca marche pas :s . merci beaucoup je ne tempête plus avec mais question a un autre jour . et je vais continuer mon petit projet de calculé les fonction (math) :) . et je te l'enverrai. :)
0