2016-09-17 18 views
0
/*This program 
1. requires user to enter their weight and planet name 
2.use enum 
3. display error message if listed planet name isn't entered 
*/ 

/*Weight Factors on Each Planet 
Mercury = 0.4155 
Venus = 0.8975 
Earth = 1 
Moon = 0.166 
Mars = 0.3507 
Jupiter = 2.5374 
Saturn = 1.0677 
Uranus = 0 
Neptune = 1.1794 
Pluto = 0.0899 
*/ 

#include<iostream> 
#include<string> 
#include<cctype> 
using namespace std; 

enum Planets{MERCURY, VENUS, EARTH, MOON , MARS, JUPITER, SATURN,URANUS, NEPTUNE, PLUTO}; 

//string array that declares same 10 planets 
string planet[] = {"MERCURY", "VENUS", "EARTH", "MOON", "MARS", "JUPITER", "SATURN", "URANUS", "NEPTUNE", "PLUTO"}; 


//Function Gets the User's Weight 
double getweight() 
{ 
    double usrweight; 

    cout<<"\n What is Your Weight on a Different Planet?"; 
    cout << "\n Enter Weight(lbs) Here: "; 
    cin >> usrweight; 
    return usrweight; 
} 


//String Function 
string planetlength(string s) 
{   
    for(int i = 0; i < s.size(); i++)    
    { 
    s[i] = planetlength(s[i]);       
    } 

    return s; 

     /*1. argument variable 's' of type string is passed to function 
     2. size() function checks the length of 's' 
     */ 
} 


//Verifies User selection is valid planet 
int go2planet(string s)     
{  
int found = -1;  

for(int i = 0; i < 10; i++) //cycle thru 10 planet names 
{   
if (s == planet[i])   //if s matches one of the 10 planet names in the array, return planet name as value      
found = i; 
}  
return found; 
} 



//Function Selects Planet & Does Arithmetic 
int main() 
{ 
int journey; 
int i; 

cout<<"\n Take a trip to..."; 

for (i = 0; i < 10; i++) 
{ 
cout<<"-------Planet #--------"<< i+1 << planet[i]; 
} 

string decision = planetlength(decision); 

cout<<"\n Type in Desired Planet: "; 
cin >> decision; 

int destination = go2planet(decision);  

double conversion;  

double myweight = getweight(); 

    switch (journey) //switch can anly accept integer values to execute in C++ 
    { 
    case MERCURY: 

    conversion = (myweight)*(0.4155); 
    cout<<"\n On "<< planet[0] <<" You Weigh: "<< conversion <<" lbs."; 
     break; 


    case VENUS: 

    conversion = (myweight)*0.8975; 
     cout<<"\n On"<< planet[1] <<"You Weigh: "<< conversion << " lbs"; 
     break; 


    case EARTH: 

    conversion = (myweight)*1.00; 
     cout<<"\n On"<< planet[2] <<"You Weigh: "<< conversion <<" lbs"; 
     break; 


    case MARS: 

    conversion = (myweight)*0.3507; 
     cout<<"\n On"<< planet[3] <<"You Weigh: "<< conversion <<" lbs"; 
     break; 


    case MOON: 

    conversion = (myweight)*0.166; 
     cout<<"\n On"<< planet[4] <<"You Weigh: "<< conversion <<" lbs"; 
     break; 


    case JUPITER: 

    conversion = (myweight)*2.5374; 
     cout<<"\n On"<< planet[5] <<"You Weigh: "<< conversion <<" lbs"; 
     break; 


    case SATURN: 

    conversion = (myweight)*1.0677; 
     cout<<"\n On"<< planet[6] <<"You Weigh: "<< conversion <<" lbs"; 
     break; 

    case URANUS: 

    conversion = (myweight) * 0; 
     cout<<"\n On" << planet[7] <<"You Weigh: "<< conversion <<" lbs"; 
     break; 


    case NEPTUNE: 

    conversion = (myweight)*1.1794; 
     cout<<"\n On" << planet[8] <<"You Weigh: "<< conversion <<" lbs"; 
     break; 


    case PLUTO: 
    conversion = (myweight)*0.0899; 
     cout<<"\n On"<< planet[9] <<"You Weigh: "<< conversion <<" lbs"; 
     break; 

    default: cout << "\n Not a Valid Planet. Re-Enter Name"; 
    } 

    return 0; 
    } 

私はプログラミングクラスから得たコードを使用し、プログラムに合わせて修正しました。これはplanetlength()関数の1行です。 行:s [i] = planetlength(s [i]);私は今、 'charからconst charへの無効な変換'と言うエラーが出てきます。私は文字列配列を使用しています、私の関数は文字列の型であり、私の戻り値は文字列です。この隠された文字はどこですか?変数にstd::cinからの入力を読み取るために使用されるエラー: 'char'から 'const char'への無効な変換

+1

"cin"を列挙型にストリームすることはできません。少なくとも演算子>>をオーバーロードすることでこれを達成する方法をコンピュータに伝える必要はありません。 (これは基本的にエラーの翻訳です)ストリングをストリングに変換し、ストリングのコンテンツを介して正しい列挙型アイテムを選択します。 –

+0

「隠し文字はどこですか?」 - 's'は文字列なので、' s [i] 'はcharです。 'planetlength(s [i])'を書くことによって、文字列を期待する関数にcharを渡します。その全体の機能は意味をなしません –

答えて

0

>>は、C++言語のいくつかの本質的な機能ではありませんが、std::cinからの入力を処理し、指定されたにそれを置くことができるオペレータ(機能のすなわちいくつかの種類)変数。このような演算子は、int,float、またはstd::stringのような標準型に対して宣言され、実装されています。 ただし、あなたの惑星のようなカスタムタイプに対しては、そのような演算子は宣言されて実装されていません。そのため、このコードを期待どおりに機能させるためには、Planets列挙型に独自のoperator>>を実装する必要があります。

+0

私はその問題を避けるために私のコードを昨日から変更しました。 – eagergrammer

+0

私は自分のコードをいくつか修正しました。私はコンストラクタの使用に慣れていませんが、まだ残念です。 – eagergrammer

関連する問題