-3

これが私のコードの始まりです。コードの一番下に、エラー箇所を詳しく示します。

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    //declare variables

int usedWater = 0;
int prevReading = 0;
int currReading = 0;
const double WATER_RATE = .007;
const double MIN_CHARGES = 16.67;
double totalCharges = 0.0;

cout <<"enter the current reading: ";
cin >> currReading;
cout <<"enter the previous reading: ";
cin >> prevReading;



usedWater = currReading - prevReading;

totalCharges = usedWater * WATER_RATE;

if(totalCharges < MIN_CHARGES)
{

totalCharges = MIN_CHARGES << endl;
cout << "total charges: "  << MIN_CHARGES;   

}
else
{
cout << "Total Charges : " << totalCharges;

} 

cout << "total Charges : " << totalCharges;
cout << "Used Water : " << usedWater;

system ("pause");

 return 0;
}

36行目でエラーが発生しています。this: (totalCharges = MIN_CHARGES << endl;)
タイプミスはまったくありません。あるいは間違った言葉かもしれません。

4

2 に答える 2

2
totalCharges = MIN_CHARGES << endl;

あなたがそれで何を達成しようとしているのか正確にはわかりませんが、私はそれが次のように優れていると思います:

totalCharges = MIN_CHARGES;

現在の行が実行しようとしていることは、ビット単位で左シフトされtotalChargesた値に設定されます。コンパイラが許可したとしても、それはおそらくうまく終わらないでしょう:-)MIN_CHARGESendl


そして、余談ですが、おそらくそのコードの大部分を1行に置き換えることができます。

totalCharges = std::min (MIN_CHARGES, usedWater * WATER_RATE);

また、これらのステートメントのほとんどの最後に改行を入れcout <<て、出力が1行にまとめられないようにすることもできます。

そして、それを行う正しい方法は、後者がフラッシングを強制し、パフォーマンスの低下につながる可能性があるためで'\n'はなく、一般的に使用することです(この特定のケースではおそらく目立たないでしょうが)。std::endl

于 2013-02-20T02:50:21.440 に答える
1

<< endlはこの割り当てに属していません:

totalCharges = MIN_CHARGES;

std::endl改行を追加してストリームをフラッシュするためのストリーム マニピュレータです。MIN_CHARGESdouble const値であるため、このようなビットごとの左シフト操作は意味がありません。

あなたはおそらく次のことを意味していました:

if (totalCharges < MIN_CHARGES)
{
    totalCharges = MIN_CHARGES;
}

cout << "Total Charges : " << totalCharges;
于 2013-02-20T02:53:38.177 に答える