C++ 如何正确使用标记控制的循环,使特定任务只执行一次?
我正在制作一个程序,要求用户输入两个有理数,根据用户选择加减,我的程序将执行该任务,然后必须选择继续加减或退出 到目前为止,我已经完成了大部分编码,但在编写标记控制循环时遇到了问题。对于我的程序,将出现一个显示菜单,询问用户是否要减法、加法或退出 如果用户选择添加,屏幕将清除,顶部应显示标题“添加有理数”。这个标题应该只出现一次,然后我的程序会要求用户输入一个有理数 由于程序应该添加两个有理数,在用户输入第一个有理数后,我的程序将要求用户输入另一个有理数 总之,我的程序会问两次这个问题 问题: 我遇到的问题是,一旦标题“加法有理数”出现,我的程序第二次要求用户输入该数字,标题就会再次出现。我尝试使用一个标记控制的循环,但无论我尝试了什么,它都会跳过标题或在每次提问时重复。以下是我所指的代码:C++ 如何正确使用标记控制的循环,使特定任务只执行一次?,c++,loops,boolean,flags,C++,Loops,Boolean,Flags,我正在制作一个程序,要求用户输入两个有理数,根据用户选择加减,我的程序将执行该任务,然后必须选择继续加减或退出 到目前为止,我已经完成了大部分编码,但在编写标记控制循环时遇到了问题。对于我的程序,将出现一个显示菜单,询问用户是否要减法、加法或退出 如果用户选择添加,屏幕将清除,顶部应显示标题“添加有理数”。这个标题应该只出现一次,然后我的程序会要求用户输入一个有理数 由于程序应该添加两个有理数,在用户输入第一个有理数后,我的程序将要求用户输入另一个有理数 总之,我的程序会问两次这个问题 问题:
void GetRational(char state, int& num, int& den)
{
char c;
bool once;
once = true;
while (once)
{
if (state == 'A' || state == 'a')
{
cout << "Addition of rational numbers" << endl;
once = false;
}
else if (state == 'S' || state == 's')
{
cout << "Subtraction of rational numbers" << endl;
once = true;
}
else break;
}
while (1)
{
cout << "\nPlease enter a fraction (n/d): ";
cin >> num >> c >> den;
if (den == 0)
cout << "\nDenominator must not be 0";
else break;
}
}
void GetRational(字符状态、int&num、int&den)
{
字符c;
布尔一次;
一次=真;
while(一次)
{
如果(状态='A'| |状态='A')
{
库特>登;
如果(den==0)
如果尝试将bool once
移动到函数GetRational(…)
之外,则可能会多次调用GetRational(…)
,并且每次bool once
都可能会重新初始化。因此,代码段如下所示:
bool once = true;
void GetRational(char state, int& num, int& den)
{
char c;
while (once)
{
if (state == 'A' || state == 'a')
{
cout << "Addition of rational numbers" << endl;
once = false;
}
else if (state == 'S' || state == 's')
{
cout << "Subtraction of rational numbers" << endl;
once = true;
}
else break;
}
while (1)
{
cout << "\nPlease enter a fraction (n/d): ";
cin >> num >> c >> den;
if (den == 0)
cout << "\nDenominator must not be 0";
else break;
}
}
void GetRational(char state, int& num, int& den)
{
// will only be initialized one, at the first time call of function GetRational(...)
static bool once = true;
char c;
while (once)
{
if (state == 'A' || state == 'a')
{
cout << "Addition of rational numbers" << endl;
once = false;
}
else if (state == 'S' || state == 's')
{
cout << "Subtraction of rational numbers" << endl;
once = true;
}
else break;
}
while (1)
{
cout << "\nPlease enter a fraction (n/d): ";
cin >> num >> c >> den;
if (den == 0)
cout << "\nDenominator must not be 0";
else break;
}
}
阅读更多关于static
关键字的信息:尝试将bool once
移动到函数GetRational(…)
之外,可能是您多次调用GetRational(…)
,每次bool once
都可能被重新初始化。因此,代码片段如下所示:
bool once = true;
void GetRational(char state, int& num, int& den)
{
char c;
while (once)
{
if (state == 'A' || state == 'a')
{
cout << "Addition of rational numbers" << endl;
once = false;
}
else if (state == 'S' || state == 's')
{
cout << "Subtraction of rational numbers" << endl;
once = true;
}
else break;
}
while (1)
{
cout << "\nPlease enter a fraction (n/d): ";
cin >> num >> c >> den;
if (den == 0)
cout << "\nDenominator must not be 0";
else break;
}
}
void GetRational(char state, int& num, int& den)
{
// will only be initialized one, at the first time call of function GetRational(...)
static bool once = true;
char c;
while (once)
{
if (state == 'A' || state == 'a')
{
cout << "Addition of rational numbers" << endl;
once = false;
}
else if (state == 'S' || state == 's')
{
cout << "Subtraction of rational numbers" << endl;
once = true;
}
else break;
}
while (1)
{
cout << "\nPlease enter a fraction (n/d): ";
cin >> num >> c >> den;
if (den == 0)
cout << "\nDenominator must not be 0";
else break;
}
}
阅读更多关于static
关键字:您可以尝试此代码。使用if循环
bool once="true";
void GetRational(char state, int& num, int& den)
{
char c;
if(once=="true")
{
if (state == 'A' || state == 'a')
{
cout << "Addition of rational numbers" << endl;
}
else if (state == 'S' || state == 's')
{
cout << "Subtraction of rational numbers" << endl;
}
else { }
}
while (1)
{
once="false";
cout << "\nPlease enter a fraction (n/d): ";
cin >> num >> c >> den;
if (den == 0)
cout << "\nDenominator must not be 0";
else break;
}
}
bool once=“true”;
void GetRational(字符状态、int&num、int&den)
{
字符c;
如果(一次==“真”)
{
如果(状态='A'| |状态='A')
{
库特>登;
如果(den==0)
cout您可以尝试此代码。使用if循环
bool once="true";
void GetRational(char state, int& num, int& den)
{
char c;
if(once=="true")
{
if (state == 'A' || state == 'a')
{
cout << "Addition of rational numbers" << endl;
}
else if (state == 'S' || state == 's')
{
cout << "Subtraction of rational numbers" << endl;
}
else { }
}
while (1)
{
once="false";
cout << "\nPlease enter a fraction (n/d): ";
cin >> num >> c >> den;
if (den == 0)
cout << "\nDenominator must not be 0";
else break;
}
}
bool once=“true”;
void GetRational(字符状态、int&num、int&den)
{
字符c;
如果(一次==“真”)
{
如果(状态='A'| |状态='A')
{
库特>登;
如果(den==0)
cout要使GetRational
记住的值一次
下次调用它时,将变量声明为
static bool once = true;
static
变量将只初始化一次,这将在第一次调用GetRational
之前
然后,在您检查它之后以及从GetRational
返回之前,设置
once = false;
这将在调用GetRational
之间保持,以使GetRational
记住的值一次
下次调用时,将变量声明为
static bool once = true;
static
变量将只初始化一次,这将在第一次调用GetRational
之前
然后,在您检查它之后以及从GetRational
返回之前,设置
once = false;
这将在调用GetRational
之间持续存在。为什么对只应该发生一次的事情有一个循环???您应该将title放在这个函数之外。这个函数似乎是一个输入检查,而不是title。这是一个XY问题,您被困在您创建的循环中。请跳出循环。如果GetRational
被调用两次,那么你不应该在这个函数中放入state=='A'
部分。因为它只需要一次。很抱歉,我是一个初学者,所以很多这些概念对我来说都是新概念,但我尝试对标题使用标志控制循环的原因是我想让它只显示一次。最初我只使用了if语句,但是每次我的程序要求用户输入分数时,title都会重复,所以我想如果我使用了flag控件,我可以让它只显示一次(如果有意义的话)。尝试将bool一次性移出函数并使其全局化。可能是您调用函数GetRational(…)
多次。为什么对只应该发生一次的事情有一个循环???你应该将title放在这个函数之外。这个函数看起来像是一个输入检查,而不是title。这是一个XY问题,你被困在你创建的一个循环中。跳出这个循环。如果调用了两次GetRational
,那么你就不应该放state=='A'
这个函数的一部分。因为它只需要一次。很抱歉,我是一个初学者,所以很多这些概念对我来说都是新概念,但我尝试对标题使用标志控制循环的原因是我想让它只显示一次。最初我只使用了if语句,但每次我的程序都会重复标题请用户输入一个分数,因此我认为如果我使用了一个flag控件,我可以使它只显示一次,如果这样做有意义的话。尝试将bool一次性移出函数并使其全局化。可能是您正在调用函数GetRational(…)
多次。我曾经将bool移出GetRational函数,并且能够解决我遇到的问题!感谢您的帮助!很高兴知道它有帮助!这