Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1097 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème avec un IF/ELSE

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec un IF/ELSE

n°1635792
magg0t
Posté le 02-11-2007 à 22:11:55  profilanswer
 

Bonsoir tout le monde !
Voila je m'adresse a votre savoir parce que la je suis a deux doigt de m'arrancher les cheveux ! j'arrive pas a comprendre pourquoi cela ne fonctionne pas !
 je précise que je suis ARCHI débutante ! donc si certaines choses vous parraisse grotesque au point de vous arracher les cheveux j'en suis désolé :D
 
Voila le problème, j'essaie de créer une fonction qui me permette de faire naitre qq1 (j'ai deja créer deux personnes (Adam & Eve c'est nul ms c mon prof ca  :heink:  ) voila ce que j'ai fait :
 
void naissance() {
 char nom_mere[100];
 char nom_pere[100];
 char sexe;
 char prenom_enfant[100];
 printf("Entrer le nom de la mere : " );
 scanf("%s",nom_mere);
 printf("Entrer le nom du pere : " );
 scanf("%s",nom_pere);
 printf("Choisir le sexe de l'enfant (G/F) : " );
 scanf("%c",&sexe);
 if ((sexe=='G') || (sexe=='g'))
 {
  printf("Entrer un prenom de garcon : " );
  scanf("%s",prenom_enfant);
 }
 else
 {
  printf("Entrer un prenom de fille : " );
  scanf("%s",prenom_enfant);
 }
 printf("\n**** Felicitation !! %s est ne(e) ****", prenom_enfant);
}
 
 
Et donc voila le problème :
juste après avoir choisit le sexe, il me demande un prénom de fille (même si je tappe G ou g) et je peux même pas l'entrer il me met directement la phrase "Félicitation..."
Donc....
 
SI vous avez une idée pcq la j'en ai marre :(
Merciii
 

mood
Publicité
Posté le 02-11-2007 à 22:11:55  profilanswer
 

n°1635796
LePhasme
Les Belges domineront le monde
Posté le 02-11-2007 à 22:22:58  profilanswer
 

On ne peut pas comparer des chaines comme ca, tu dois utiliser les fonctions spécifiques aux traitements de chaines, regarde du côté de strcmp.

n°1635798
magg0t
Posté le 02-11-2007 à 22:24:45  profilanswer
 

Excuse moi mais je suis un peu beaucoup nulle en C :D
Donc pourrais tu etre plus explicite s'il te plait ! merciiii en tout cas

n°1635804
LePhasme
Les Belges domineront le monde
Posté le 02-11-2007 à 22:43:41  profilanswer
 

Pour manipuler des chaines de caractères (comparer,avoir la taille,copier,...) utilise la fonction strxxx (strcmp pour la comparaison) et n'oublie pas d'inclure string.h.
 
Ensuite il ne te demande pas d'entrer le prénom parce que tu récupère le sexe dans un caractère, mais il reste le \n du enter dans le buffer du scanf et donc il va le prendre directement plutot que de te demander de taper quelque chose.
 
J'espère pas avoir dit trop de connerie le C est un peu loin pour moi.

n°1635857
Trap D
Posté le 03-11-2007 à 00:21:30  profilanswer
 

Pour les comparaisons, tel que le programme est écrit, celà fonctionne puisque le sexe est codé sur un caractère.
Maintenant, les problèmes viennent que tu utilises scanf qui est une fonction TRESSSSSSSSSSSSSSSS difficile à utiliser.
Il FAUT utiliser fgets qui est LA fonction de saisie utilisateur de données, (éventuellement couplées avec les fonctions adéquates strtol, strtod pour les conversons numériques).
Tu peux aller voir là ;
http://www.linux-kheops.com/doc/ma [...] 3.txt.html
 
Il faudra d'autre part, faire du sexe une chaîne de caractères et comparer sexe[0] avec 'g' ou 'G'.

Message cité 1 fois
Message édité par Trap D le 03-11-2007 à 00:23:32
n°1635939
tpierron
Posté le 03-11-2007 à 02:50:56  profilanswer
 

Trap D a écrit :

Il faudra d'autre part, faire du sexe


 
Ouah, c'est chaud ici ...  :)

n°1636062
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-11-2007 à 14:32:50  profilanswer
 

magg0t a écrit :

voila ce que j'ai fait :


C'est toujours mieux de poster du code complet, qui compile (sauf question sur erreur de compilation) et qui soit correctement présenté...

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. void naissance (void)
  4. {
  5.    char nom_mere[100];
  6.    char nom_pere[100];
  7.    char sexe;
  8.    char prenom_enfant[100];
  9.    printf ("Entrer le nom de la mere : " );
  10.    scanf ("%s", nom_mere);
  11.    printf ("Entrer le nom du pere : " );
  12.    scanf ("%s", nom_pere);
  13.    printf ("Choisir le sexe de l'enfant (G/F) : " );
  14.    scanf ("%c", &sexe);
  15.    if ((sexe == 'G') || (sexe == 'g'))
  16.    {
  17.       printf ("Entrer un prenom de garcon : " );
  18.       scanf ("%s", prenom_enfant);
  19.    }
  20.    else
  21.    {
  22.       printf ("Entrer un prenom de fille : " );
  23.       scanf ("%s", prenom_enfant);
  24.    }
  25.    printf ("\n**** Felicitation !! %s est ne(e) ****", prenom_enfant);
  26. }
  27. int main (void)
  28. {
  29.    naissance ();
  30.    return 0;
  31. }


Message édité par Emmanuel Delahaye le 03-11-2007 à 14:35:24

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1636063
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-11-2007 à 14:34:46  profilanswer
 

LePhasme a écrit :

On ne peut pas comparer des chaines comme ca, tu dois utiliser les fonctions spécifiques aux traitements de chaines, regarde du côté de strcmp.


Quel rapport ? Il s'agit ici de comparer des caractères. Le code est correct.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1636108
LePhasme
Les Belges domineront le monde
Posté le 03-11-2007 à 17:46:18  profilanswer
 

Emmanuel Delahaye a écrit :


Quel rapport ? Il s'agit ici de comparer des caractères. Le code est correct.
 


J'ai eu un gros doute la dessus, et je n'ai pas réussi à trouver une réponse claire :-/

n°1636140
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-11-2007 à 19:28:18  profilanswer
 

LePhasme a écrit :


J'ai eu un gros doute la dessus, et je n'ai pas réussi à trouver une réponse claire :-/


Il n'y a aucun doute à avoir. Les constantes caractères sont des valeurs de type int. Elles se comparent, grâce à l'opérateur ==, avec des valeurs de caractères de type char qu'on trouve dans les chaines ou des variables de type int contenant la valeur retournée par getchar(), par exemple.

 

Bref, pour comparer des valeurs numériques, on utilise == . C'est du C basique...


Message édité par Emmanuel Delahaye le 03-11-2007 à 19:30:15

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 03-11-2007 à 19:28:18  profilanswer
 

n°1636364
Sve@r
Posté le 04-11-2007 à 13:56:12  profilanswer
 

magg0t a écrit :

Excuse moi mais je suis un peu beaucoup nulle en C :D


Il te faut impérativement prendre un livre (un tuto, un cours) et commencer par le lire. Même si tu retiens pas les 3/4 des trucs, le 1/4 restant est toujours le quart le plus important
Ici les bases du C http://fr.lang.free.fr/cours/Langa [...] e_v2.0.pdf. Un peu ancien mais je l'estime parfait pour un débutant
Ici le C approfondi et hyper pointu http://mapage.noos.fr/emdel


Message édité par Sve@r le 04-11-2007 à 13:56:43

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème avec un IF/ELSE

 

Sujets relatifs
[Access] Petit problème de requete[AJAX] Problème pour affichage de l'heure
problème dans un bloc PL/SQL[RESOLU]Probleme avec session_destroy
Probleme legal copie SQL (Haut importance)probleme infobulle javascript
Probleme de compilationprobleme avec script php et HTML
[PROLOG] Petit problème simple de prédicat[VB.NET]Problème traduction C#/VB.NET
Plus de sujets relatifs à : Problème avec un IF/ELSE


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR