Probleme programme C++

Résolu
gotrunks39 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -  
overcode Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   27
 
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   Statut Membre Dernière intervention   3
 
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   Statut Membre Dernière intervention   663
 
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   Statut Membre Dernière intervention   27
 
:)
0