Probleme programme C++

Résolu/Fermé
gotrunks39 Messages postés 38 Date d'inscription jeudi 26 juin 2008 Statut Membre Dernière intervention 22 mars 2011 - 3 oct. 2010 à 23:24
overcode Messages postés 119 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 21 octobre 2011 - 6 oct. 2010 à 04:02
Salut!

Je dois faire un exercice un c++ mais je bloque ....
Je doit demander le prenom, le sexe et l'année de naissance de l'utilisateur, donc voici mon code :

#include <iostream>
#include <cmath>

using namespace std;

#include <ctime>
int anneeCourante()
{
time_t date = time(0);
return 1900 + localtime(&date)->tm_year;
}


int main()

{

string prenom;
int annee_naissance;
char sexe;



cout <<"Quel est votre prenom??" << endl;
cin >> prenom;
cout <<"Quelle est votre annee de naissance??" << endl;
cin >> annee_naissance;
cout <<"Quel est votre sexe??" << endl;
cin >> sexe;


cout << "Bonjour " << prenom << " tu es agé" << (sexe == 'F')?'e':"" << " de " << anneeCourante()-annee_naissance << " ans." << endl;



}


Dans l'exercice je doit tenir compte si c'est une fille ou un garcon en mettant un 'e' à 'agé' puis un 's' ou non à 'an'

Mais le probleme c'est mon (sexe == 'F')?'e':""

Quand j'essaye d ele compiler il me dit: "error: invalid operands of types `const char [1]' and `const char [5]' to binary `operator<<'"


Pouvez vous m'aider?? Je pense que c'est simplement une erreur de syntaxe mais je suis pas sur

Je n'ose pas le faire pour le 's' de 'an' j'attend vos reponse ;)

Merci :)


2 réponses

overcode Messages postés 119 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 21 octobre 2011 27
Modifié par overcode le 4/10/2010 à 05:12
Bonsoir,

Comme tu le dis, c'est juste un problème de syntaxe :)

Y a comme une légère embrouille au niveau des priorités des opérateurs : le ternaire et <<. Ca se résoud avec des parenthèses.


cout << "Bonjour " << prenom   
     << ", tu es agé" << ( sexe == 'F' ? "e" : "" )  
     << " de " << anneeCourante()-annee_naissance   
     << " ans." << endl ;  


Remarque qu'il y avait une autre erreur :
(sexe == 'F')?'e':"" 


Les deux choix doivent être du même type, ce qui n'est pas le cas de ton ancien code. D'un côté tu mets un char, de l'autre une chaîne de caractère.

Au passage, pour ne plus être limité à des prénoms sans espaces, tu peux mettre :

getline(cin, prenom) ;  


au lieu de :

cin >> prenom ;  


Citation :
Je n'ose pas le faire pour le 's' de 'an' j'attend vos reponse ;)


Tu comptais traiter le cas où l'utilsateur aurait moins de deux ans ?! XD
0
gotrunks39 Messages postés 38 Date d'inscription jeudi 26 juin 2008 Statut Membre Dernière intervention 22 mars 2011 3
5 oct. 2010 à 21:37
Oui effectivement ca fonctionne bien merci ^^

Et oui il faut traiter le cas où l'utilisateur a moins de 2 ans xD (meme si c'est un peu cucul dans l'idée ^^)

Par contre a quoi sert getline ??

Sinon merci à toi de ton aide
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
Modifié par Pacorabanix le 5/10/2010 à 22:02
getline sert à lire une ligne entière à partir d'un flux (comme cin ou un fichier).

Avec le cin >> variable, la lecture ne prendra que le premier mot. au premier espace ou tabulation, la lecture du flux s'arrêtera pour cette variable.

Avec le getline, c'est le flux jusqu'à ce que tu tape "Enter" qui sera lu.
0
overcode Messages postés 119 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 21 octobre 2011 27
6 oct. 2010 à 04:02
:)
0