誰かがこのコードを見て、何が間違っているのか理解してもらえますか?whileループのエラーチェックはC++ですか?
#include <iostream>
#include <vector>
using namespace std;
int numExercise;
cout << "Enter num exercises: ";
cin >> numExercise;
vector <float> weight;
float sumWeight = 0;
while(sumWeight != 1)
{
// Loop to assign a weighted value to each exercise.
for (int i = 0; i < numExercise; i++)
{
float weightEntered;
cout << "\n Assignment " << i + 1 << " : ";
cin >> weightEntered;
//Divide percentage by 100 to get decimals.
weightEntered /= 100;
//Send the data back to the vector.
weight.push_back(weightEntered);
}
// Loop to error check if the total weights isn't 100.
for (int i = 0; i < numExercise; i++)
{
sumWeight += weight[i];
}
cout << sumWeight << endl;
sumWeight = 0;
//if (sumWeight != 1)
cout << "\n\t\tError, total weights should be 100" << endl;
}
ので、このコードでは、私は割り当ての一定量を入力だと割り当て当たり重量が100%以上でなければならない...例えば3つの割り当てを入力し、各重量は30、30、40後重みが入力されると、コードは各重みを100で除算して小数点の値を取得します(これは他のものを計算するために残りのコードで使用しています)。
問題は、ユーザーが入力した値が100を超えていない場合は、数値をもう一度入力する必要があることを確認しようとしています。このループを実行して間違った数字を入力すると、もう一度入力するように求められますが、2回目に入力された重みの合計を通らないので、表示される数字はまだ最初の合計です。私は何を間違えているのですか?あなたが重みを保存するためのベクターを使用している
より挿入を使用して、あなたの問題を解決することができます。長期的には、これはあなたのためにあなたのコードをデバッグする以上の方法をあなたに役立ちます。 – drescherjm
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
このコードは、ユーザーが10.3,5.6.7などの分数値を入力すると失敗することになります。その理由は、これらの数値が合計されたときに1.0(または100)になることが保証されていないからですあなたは思うかもしれませんが。その理由は、浮動小数点は正確ではないからです。 – PaulMcKenzie