Problème avec un IF/ELSE

Problème avec un IF/ELSE - C - Programmation

Marsh Posté le 02-11-2007 à 22:11:55    

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
 

Reply

Marsh Posté le 02-11-2007 à 22:11:55   

Reply

Marsh Posté le 02-11-2007 à 22:22:58    

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.

Reply

Marsh Posté le 02-11-2007 à 22:24:45    

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

Reply

Marsh Posté le 02-11-2007 à 22:43:41    

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.

Reply

Marsh Posté le 03-11-2007 à 00:21:30    

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
Reply

Marsh Posté le 03-11-2007 à 02:50:56    

Trap D a écrit :

Il faudra d'autre part, faire du sexe


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

Reply

Marsh Posté le 03-11-2007 à 14:32:50    

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/
Reply

Marsh Posté le 03-11-2007 à 14:34:46    

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/
Reply

Marsh Posté le 03-11-2007 à 17:46:18    

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 :-/

Reply

Marsh Posté le 03-11-2007 à 19:28:18    

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/
Reply

Marsh Posté le 03-11-2007 à 19:28:18   

Reply

Marsh Posté le 04-11-2007 à 13:56:12    

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.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed