これまでの私のプログラムでは、私の質問はif文を各cout/cinコードの後に含める必要があるのか、それを一般化する方法があるのでしょうか? :あなたがしたい場合if文for C++
if(!check(watts, hours_per_day))
{
return 1;
}
:次に、あなたの主な機能であなたは1と2つのif文を置き換えることができます
bool check(int watts, int hours_per_day)
{
if (watts< 0)
{
cout << "Error- negative watts detected " << endl;
return false;
}
if (hours_per_day< 0)
{
cout << "Error - negative hours/day detected " << endl;
return false;
}
}
:
#include <iostream>
using namespace std;
int main()
{
double watts, hours_per_day, watt_hours, dollars_per_wh, result;
dollars_per_wh= .00008;
cout << " How many Watts for the Air conditioner? ";
cin >> watts;
cout << " How many hours/day do you run the Air Conditioner? ";
cin >> hours_per_day;
if (watts< 0)
{
cout << "Error- negative watts detected " << endl;
return 1;
}
if (hours_per_day< 0)
{
cout << "Error - negative hours/day detected " << endl;
return 1;
}
cout << "How many Watts for the Television? " ;
cin >> watts;
cout << "How many hours/day do you run the Television? " ;
cin >> hours_per_day;
if (watts< 0)
{
cout << "Error- negative watts detected " << endl;
return 1;
}
if (hours_per_day< 0)
{
cout << "Error - negative hours/day detected " << endl;
return 1;
}
cout << "How many Watts for the Washer? " ;
cin >> watts;
cout << "How many hours/day do you run the Washer? " ;
cin >> hours_per_day;
if (watts< 0)
{
cout << "Error- negative watts detected " << endl;
return 1;
}
if (hours_per_day< 0)
{
cout << "Error - negative hours/day detected " << endl;
return 1;
}
return 0 ;
}
重要なチェックがありません。入力が実際に成功したことを確認するために入力を検証していません。たとえば、ワット数を尋ねられたら "abcdef"を入力してみてください。入力操作後にストリームの状態をチェックする必要があります(例えば 'if(!(cin >>ワット)){/ *エラー* /}を処理する 'かそれに類するものを使用します)。これらすべての一般化についてはもちろん、それらの検証ブロックを別々の関数にリファクタリングすることができます。ブロックごとに、共通するものを新しい関数に移動し、共通でないものを引数として渡します。 –
"...一般化する方法はありますか?"はい、それはまさに関数の主な目的の一つです。以下にいくつかの例がありますので、私は別の例を追加しません。これはAC、TV、洗濯機の各ケースに適用できる関数を書く方法を学ぶ良いプロジェクトのように見えます。 –