如何重置 C++ 中的所有变量?
How to reset all variables in C++?
我的代码似乎可以正常运行,
但是我们的教授警告我们这个任务可能需要
重置变量以便在第一个 运行.
之后干净地重新 运行
问题是我不知道如何重置变量
我认为它对于更复杂的代码变得必不可少。帮助?
这个天气任务基本上是“询问用户现在是几月,
然后要求 min.temperature、max.temp。 & 本月每一天的降雨量,
然后打印每月平均值和总降雨量。
// Note to Whosebugers: 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;
}
编辑:
我收到一些关于缺少初始化的反馈(我假设这意味着定义变量)。我试过不那样做。我的教授要求我们至少"use const as much as possible and "硬编码”变量。
我在这里找不到 const 的任何用法,所以我用最小 "hardcording" 进行了补偿,我希望他说的是初始化。
由于 C++ 的值语义,您已经为您重置了变量。在你的 while 循环中你有
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;
当您到达 while 循环的末尾时 (}
),所有这些变量都将超出范围。然后当你再次开始循环时,它们将被重新创建并再次重置为它们的初始值。
在初始化它们之前,您在 for 循环中使用了 mmNedbor
、maxTemp
和 minTemp
,即 undefined behavior,因此您应该将它们设置为某个默认初始值.
这意味着您在循环内使用的任何依赖于它被初始化为特定值的变量都应该在循环开始时被初始化。
在您的例子中,您在循环内声明了所有相关变量,但没有为所有变量分配初始值。如果您在写入之前尝试读取任何这些未初始化的值,它们将包含未知数据。特别是 minTemp
、maxTemp
和 mmNedbor
是在没有初始化的情况下读取的。因此,请确保所有这些变量都有一些初始值。
您的代码几乎是正确的。
变量将被删除并重新分配,因为它们在内部范围内。
你错了,你没有初始化它们。当您声明像 int
这样的基本类型时,您只需在堆栈中获取接下来的 4 个字节,因此它将包含那里的任何内容。
这通常很糟糕,因为有时您假设它会是 0。因此,要修复您的代码,只需确保您显式初始化所有变量(将 0 分配给它们)。
只需将您在整个循环中使用的所有变量设置为 0 或循环开始时的其他值,就像您对 minTempAdd 和 mmNedborAdd 变量所做的那样。
附带说明一下,您的代码难以阅读,因此我建议您花一些时间重构它。
ex: my name program is program_name.cpp
how to reset all variabel :
my version is :
char choice;
cout<< "do you want to reset all variabel and loop the program"
cin>>choice;
if (choice=="y")system("program_name.axe")
else(exit(0))
if you want to reset ALL VARIABEL please dont use goto;
我的代码似乎可以正常运行,
但是我们的教授警告我们这个任务可能需要
重置变量以便在第一个 运行.
问题是我不知道如何重置变量
我认为它对于更复杂的代码变得必不可少。帮助?
这个天气任务基本上是“询问用户现在是几月,
然后要求 min.temperature、max.temp。 & 本月每一天的降雨量,
然后打印每月平均值和总降雨量。
// Note to Whosebugers: 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;
}
编辑:
我收到一些关于缺少初始化的反馈(我假设这意味着定义变量)。我试过不那样做。我的教授要求我们至少"use const as much as possible and "硬编码”变量。
我在这里找不到 const 的任何用法,所以我用最小 "hardcording" 进行了补偿,我希望他说的是初始化。
由于 C++ 的值语义,您已经为您重置了变量。在你的 while 循环中你有
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;
当您到达 while 循环的末尾时 (}
),所有这些变量都将超出范围。然后当你再次开始循环时,它们将被重新创建并再次重置为它们的初始值。
在初始化它们之前,您在 for 循环中使用了 mmNedbor
、maxTemp
和 minTemp
,即 undefined behavior,因此您应该将它们设置为某个默认初始值.
这意味着您在循环内使用的任何依赖于它被初始化为特定值的变量都应该在循环开始时被初始化。
在您的例子中,您在循环内声明了所有相关变量,但没有为所有变量分配初始值。如果您在写入之前尝试读取任何这些未初始化的值,它们将包含未知数据。特别是 minTemp
、maxTemp
和 mmNedbor
是在没有初始化的情况下读取的。因此,请确保所有这些变量都有一些初始值。
您的代码几乎是正确的。 变量将被删除并重新分配,因为它们在内部范围内。
你错了,你没有初始化它们。当您声明像 int
这样的基本类型时,您只需在堆栈中获取接下来的 4 个字节,因此它将包含那里的任何内容。
这通常很糟糕,因为有时您假设它会是 0。因此,要修复您的代码,只需确保您显式初始化所有变量(将 0 分配给它们)。
只需将您在整个循环中使用的所有变量设置为 0 或循环开始时的其他值,就像您对 minTempAdd 和 mmNedborAdd 变量所做的那样。
附带说明一下,您的代码难以阅读,因此我建议您花一些时间重构它。
ex: my name program is program_name.cpp
how to reset all variabel :
my version is :
char choice;
cout<< "do you want to reset all variabel and loop the program"
cin>>choice;
if (choice=="y")system("program_name.axe")
else(exit(0))
if you want to reset ALL VARIABEL please dont use goto;