2016-05-01 7 views
-2

を取得しておくと、私はキロメートルとマイルコンバータアプリケーションを作成しようとしています。コードにコードブロックを使用しています。選択肢2は結果として0を与え続けます。ここで私が入力しています正確なコードです:私のC++コードで何が問題になっていますか?私はプログラミングの初心者だ間違った結果

#include <iostream> 
using namespace std; 
double choice, value1, result; 
// I'm sure I messed up somewhere after this: 
double value2 = .621371; 
double value3 = 1.609344; 
// Are these two lines^supposed to be here? 
int main() 
{ 
    while (true) { 
     cout << "1. Kilometers to Miles" << endl; 
     cout << "2. Miles to Kilometers" << endl; 
     cout << "3. Exit the Application" << endl; 
     cout << "Please enter a choice: "; 
     cin >> choice; 
     if (choice == 3) 
      break; 
     cout << "Please enter the first value: "; 
     cin >> value1; 
     // This if statement keeps giving me 0: 
     if (choice == 2) 
      result = value1 * value2; 
     // I believe this part here is okay: 
     else if (choice == 3) 
      result = value1/value3; 
     cout << "The result is: " << result << endl; 
    } 
} 
+1

ええと? 'choice'が' 3'なら2回、 'choice'が' 1'ならば何もチェックしませんか?だから、 'switch'が' else else'のすべてのチェーンに勝っているのです。 – SJuan76

+0

また、あなたの選択に 'double'を使わないでください。これは 'int'(または他の整数型)が非常に適切であるところです。それはあなたのケースでエラーを引き起こすことはありませんが、道路のトラブルに向かっているように倍を比較する。浮動小数点の不正確さについて学ぶとき、それについて学びます。 –

+0

私はswitch文をまだ学んでいません。私はすぐにそれを学ぶつもりです。 – MrAckills

答えて

0

私は今、問題を修正しました。もし誰かが私に下にコメントすることができます、これは私の元のコードよりもはるかに良いですか?基本的に、この新しいコードは皆さんにもっと読みやすく、組織化されていますか?私はこの更新されたコードについてy'allの意見を得るのが大好きです。

#include <iostream> 
float choice, value1, result; 

int main(){ 
    while (true){ 
    std::cout << "Please enter a choice: " << std::endl << 
       "1. Kilometers to Miles" << std::endl << 
       "2. Miles to Kilometers" << std::endl << 
       "3. Exit the Application" << std::endl; 
    std::cin >> choice; 
    if(choice == 3){ 
     break; 
    } 
    std::cout << "Enter the Value you would Like to Convert: "; 
    std::cin >> value1; 
    if (choice == 1){ 
     result = value1 * 0.62137; 
    } 
    else if (choice == 2){ 
     result = value1 * 1.609344; 
    } 
    std::cout << "The result is: " << result << std::endl; 
    } 
} 
0

はここにあなたのコードを修正する方法は次のとおりです。

1.Indentは適切に(あなたのコードをより読みやすくなります)
2. これは、あなたが動作しないコード作っていますあなたのコードも非常に多くの不必要である:(選択== 3){ ブレーク場合
。 }文はそれらの後、これらの中括弧を持っている必要がありますあなたのif/else/else if
3. ひとつひとつの1:

if(whatever=whatever) { 
    //whatever 
} 

4.この単純なプログラムのためにこれらのbreakステートメントを使用して忘れます。
5.「キロメートルからマイル」を逃した。
6. 終了オプションがめちゃくちゃにされ、

else if(choice == 3) { 
    return 0; // To end the program 
} 

7. ないdoublechoice変数を行い、から

else if(choice == 3) 
result = value1/value3 

を変更することは非常に、非常に、多くを使用しています、はるかに多くのデータ単純なint値(及びどのユーザが3.1(または4.838389、ECT)入力とを入力した場合?
8.あなたは(あなたが3.3マイル/キロメートルをしたい、3.37374662232365マイル/キロメートルを望んでいない。)、あなたの結果以下の精度を確認する必要がありますが、宣言するもの「結果の前にも#include <iomanip>を追加し、setprecision()に追加していることを行うことができます「ある(すなわち:result = setprecision(1) value1 * value2;)あなたは、各STD関数の前に:: STDを書き、あるいは単にusing std::whatever

を書く必要がありますので全体std名前空間を含む
9は、(それは多くをあなたのプログラムが遅くなります)、この場合には不適切です
+0

これは本当に役立ちます。あなたは最高の答えだと思います。私は次回も正しくインデントするようにします。私はちょうど初心者ですので、setprecision()、#などを含んでいます。私は分かりませんでしたが、今私はして、私は間違いを修正することを確認します。ありがとう。 – MrAckills

+0

@ user6279160私は初心者ですが、私は3ヶ月前に始めましたが、私はたくさん知っています。あなたが望むのであれば、私はあなたに完全に固定され、アップグレードされたコードを提供することができます... –

+0

私はちょうど数週間前に学習を始めました。もちろん、それはあなたには問題ありません。私はswitchステートメントを覚えているだけで、現在のコードにそれらを実装する方法を見つけることを試みています。私はこのすべてのことを学ぶことによって今やコードを削除して最初から始めなければならないと信じています。 – MrAckills

関連する問題