私のコードは問題なく機能しているようです
が、教授は
、最初の実行後に正常に再実行するために、このタスクでは変数のリセットが必要になる可能性があると警告しました。
問題は、変数をリセットする方法がわからない
ことです。より複雑なコードではそれが不可欠になると思います。助けて?
この気象タスクは、基本的に「ユーザーに月を尋ね、その月の
各日の最低気温、最高気温、降雨量を尋ね、
月平均と総降雨量を印刷することです。
// Note to Stackoverflowers: Dager = days & Nedbor = rainfall.
// Other then that everything below is translated to english just for this
// question
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
char rerun = 'j'; // rerun program variable
while (rerun == 'j' || rerun == 'J') // rerun program
{
int antDager, antD; // number of days
int minTemp;
float minTempAdd = 0; // min.temp.
int maxTemp;
float maxTempAdd = minTempAdd; // max.temp
int mmNedbor;
float mmNedborAdd = 0; // rain/downfall
do {
cout << "\n\tHow many days in this month? (28 til 31)\n"; //#days?
cin >> antDager;
if (31 < antDager || 28 > antDager) // must be 28-31
{
cout << "\n\tInvalid value\n";
}
} while (31 < antDager || 28 > antDager); // loop if invalid value
for (antD = 1; antD < antDager;
antD++, // for loop the month
minTempAdd += minTemp, maxTempAdd += maxTemp,
mmNedborAdd +=
mmNedbor) { // the above increments temperatures and rain with itself
do {
cout << "\n\tminTemp? (-70 til 70), max.temp? (min til 70),
rain in mm
? (0 til 200)\n "; //sentence break for this website
cin >>
minTemp >> maxTemp >>
mmNedbor; // temperatures and rain input
if ((-70) > minTemp || 70 < minTemp) {
cout << "\n\tInvalid min-value\n";
}
if (minTemp > maxTemp || 70 < maxTemp) {
cout << "\n\tInvalid max-value\n";
}
if (0 > mmNedbor || 200 < mmNedbor) {
cout << "\n\tInvalid Nedbor-value\n";
}
} while ((((-70) > minTemp || 70 < minTemp) ||
(minTemp > maxTemp || 70 < maxTemp)) ||
(0 > mmNedbor || 200 < mmNedbor));
}
cout << "\n\tGjennomsnittlig minTemp: " << minTempAdd / antDager;
cout << "\n\tGjennomsnittlig minTemp: " << maxTempAdd / antDager;
cout << "\n\tGjennomsnittlig nedbor: " << mmNedborAdd / antDager;
cout << "\n\tTotal nedbor: " << mmNedborAdd << endl;
cout << "\n\tØnsker du å kjøre programmet igjen? j/n";
cin >> rep;
if (rerun == 'n' || rerun == 'N') {
cout << "\n\tExiting program\n";
}
}
return 0;
}
編集:
初期化の欠如についていくつかのフィードバックがあります(それは変数を定義することを意味すると思います)。私はそれをしないように努めました。私の教授。「可能な限りconstを使用し、変数を「ハードコーディング」するのを最小限に
抑えるように求められました。ここではconstの使用法が見つからなかったので、最小限の「ハードコーディング」で補正しました。彼が初期化について話していたと思います。
あなたのコードはほぼ正しいです。変数は内部スコープ内にあるため、削除されて再割り当てされます。
あなたが間違っていたのは、それらを初期化しないということです。プリミティブ型を宣言すると、int
スタックで次の4バイトを取得するだけなので、そこにあるものはすべて含まれます。
これは、0になると想定されることがあるため、一般的には悪いことです。コードを修正するには、すべての変数を明示的に初期化する(0を割り当てる)ようにしてください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加