2017-05-27 3 views
0

J'ai créé un programme basé sur une surcharge de fonction consistant en 2 fonctions int cube (int) et float cube (float). Ma fonction principale lit les valeurs de int x et float y respectivement. Maintenant, quand je lance le programme, je mets une valeur float au lieu de l'entier va; ue Et quand je mets 2.5 (valeur décimale) au lieu de valeur entière dans la variable "x", Le compilateur ne me demande pas la valeur de y et automatiquement 2 pour x (int) et 0.5 pour y (float) et retourne le cube de 0.5. Pourquoi cela arrive. Pourquoi 0.5 est automatiquement stocké dans y au lieu de demander l'entrée?Programme basé sur une surcharge de fonction

Mon programme est comme ça -

#include<iostream> 
using namespace std; 
int main() 
{ 
    int x; 
    float y; 
    int cube(int); 
    float cube(float); 
    cout<<"Enter a number to find its cube"<<endl; 
    cin>>x; 
    cout<<"The cube of the number "<<x<<" is "<<cube(x)<<endl; 

    cout<<"Enter a number to find its cube"<<endl; 
    cin>>y; 
    cout<<"The cube of the number "<<y<<" is "<<cube(y)<<endl; 
    return 0; 
} 
int cube (int num) 
{ 
    return num*num*num; 
} 

float cube (float num) 
{ 
    return num*num*num; 
} 

sortie est -

 
Enter a number to find its cube 
2.5 
The cube of number 2 is 8 
Enter the number to find its cube 
The cube of number 0.5 is 0.125 

Quelqu'un peut-il me aider à ce sujet Merci

+0

Je suggère d'utiliser une méthode de modèle – Simon

+0

Le titre de la question ne donne pas vraiment la moindre idée du problème. Ce problème doit être raisonnablement fréquent chez les débutants, mais je n'ai pas trouvé de dupe avec une recherche rapide. – Walter

Répondre

1

Vous essayez de lire une valeur int, mais donner un valeur à virgule flottante en entrée. Cela signifie que le programme va lire la partie entière, arrêter de lire dès qu'il voit quelque chose qui ne correspond pas au motif d'une valeur entière (le '.' dans votre cas) et le laisser dans le tampon d'entrée pour la prochaine opération d'entrée.

Si vous souhaitez lire des lignes entières et ignorer les entrées non analysées, utilisez std::istream::ignore après chaque entrée. Ou lisez une ligne entière dans une chaîne en utilisant std::getline et utilisez un std::istringstream pour "analyser" l'entrée.

0

Ceci est assez simple:

cout<<"Enter a number to find its cube"<<endl; 

vous entrez 2,5

cin>>x; 

ce lit 2 (fixe x=2) et arrête, parce que le .5 ne peut pas faire partie d'un int.

cout<<"The cube of the number "<<x<<" is "<<cube(x)<<endl; 

cout<<"Enter a number to find its cube"<<endl; 
cin>>y; 

le .5 est encore dans le flux d'entrée, de manière à définir est lu y=0.5. Il n'est pas nécessaire d'entrer un autre numéro et le programme n'arrête pas d'attendre la saisie.