2017-05-27 13 views
0

int cube(int)とfloat cube(float)の2つの関数からなる関数のオーバーロードに基づいてプログラムを作成しました。 、「X」変数に代わりに整数値のUEと私は2.5(小数点値)を入れたときに、私の主な機能は、私が代わりに整数VAをfloat値を入れてプログラムを実行するとint型のxとフロートのy respectively.Nowの値を読み取りコンパイラはyの値を求めておらず、自動的にx(int)2とy(float)0.5を返し、0.5の立方体を返します。なぜこれが起こっているのですか?入力を求めるのではなく、yが自動的に0.5に格納されるのはなぜですか?関数のオーバーロードに基づくプログラム

私のプログラムがそのようなものです -

#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; 
} 

出力がある -

 
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 

、誰もがあなたがint値を読みますが、与えることを試みること おかげ

+0

私は質問のタイトルは本当に問題についての手掛かりを与えるものではありません – Simon

+0

テンプレートメソッドを使用することをお勧め。この問題は、初心者の間ではかなり一般的である必要がありますが、私は迅速な検索で二重引用符を見つけることができませんでした。 – Walter

答えて

1

について私を助けることができます浮動小数点値を入力として使用します。これは、プログラムは、整数部分を読んで、それは整数値のパターン(あなたのケースで'.')と一致し、次の入力操作のための入力バッファにそれを残していない何かを見ているとすぐに読み取りを停止することを意味します。

あなたは、全体のラインを読み、解析対象外の入力を破棄し、その後、いずれかの各入力後std::istream::ignoreを使用したい場合。または、行全体をstd::getlineを使用して文字列に読み込み、std::istringstreamを使用して入力を解析します。

0

これは非常に単純です:

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

あなたは2.5

cin>>x; 

を入力.5intの一部にすることはできませんので、これは、2(セットx=2)を読み込み、停止します。

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

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

.5は、入力ストリームにまだあるので、y=0.5を設定するために読み出されます。別の番号を入力する必要はないので、プログラムは入力を待つことを止めません。

関連する問題