如何在C++中不使用布尔运算符检查数字是否在区间内

cgvd09ve  于 2023-01-22  发布在  其他
关注(0)|答案(5)|浏览(118)

我刚刚开始编程,这是我在这个网站上的第一篇文章,希望这是一个漫长而富有成效的旅程的开始!
我正在从Deitel的书中学习C++,也是控制流1的练习之一(第4章-如果,如果...其他,而)是问我,除其他外,输入一个数字并检查它是否不小于1且不大于20(在这种情况下,必须向用户显示错误消息,直到输入有效的数字)。为了使它工作,我必须使用||操作符如下:

while (number < 1 || number > 20)
{
   cout << "Wrong number, insert a valid number";
   cin >> number;
}

问题是,这本书还没有介绍布尔运算符(||,&& ...)!
所以我的问题是,有没有可能在一个值上操作这样一个控件,而不使用“or”操作符,只使用if,if... else和while,如果需要的话,嵌套这些操作符?

8dtrkrch

8dtrkrch1#

在方法中将嵌套if。

bool ok = false;
if (number >= 1) {
    if (number <= 20) {
        ok = true;
    }
}
if (!ok) {
    // print error
}

所以你假设这个数字是坏的,如果它〈1,那么它跳过第一个if,这个数字仍然是坏的,如果这个数字〉1,那么它尝试第二个条件,并且只把ok设置为true is that is true,也就是说两个条件都是真的,你可以把它 Package 在必要的条件中,同时自己看:

bool ok = false;
while(!ok)
{
    // input number
    // check number
    // optional error
}
b09cbbtk

b09cbbtk2#

你可以用算术来计算,但这是一个技巧

do
{
   cout << "Insert a valid number";
   cin >> number;
}
while ( (number-1)*(20-number)<0 );

另一种方法是单独测试

while ( true ) 
{
   cout << "Insert a valid number";
   cin >> number;
   if ( number < 1 ) continue;
   if ( number > 20 ) continue;
   break;
}
moiiocjp

moiiocjp3#

那么,您可以使用std::clamp()

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
   int low = 10, high = 20;
   int number;

   while ( true )
   {
      cout << "Enter a number between " << low << " and " << high << " inclusive : ";
      cin >> number;
      if ( clamp( number, low, high ) == number ) break;
      cout << "Invalid number\n\n";
   }
}
e5nqia27

e5nqia274#

你已经可以写一个函数了(见main函数),所以写一个检查数字是否在一个区间内,如果在区间内返回1,否则返回0。这可以通过在函数中只使用ifreturn语句来完成。并在while语句中放置一个函数调用。

yquaqz18

yquaqz185#

谢谢大家的帮助。解决困扰我的问题的方法是彼得在评论中写的一个小表情,因为这是唯一一件我在读过的几章里已经解释过的事情(隐式布尔运算符,0表示“假”,1或更大值表示“真”)。对不起,我的问题不能更具体,但英语是“这也是为什么我开始研究Deitel的书:由于编程是一个复杂的主题,我认为在转向英语文本之前,最好先从意大利语开始。

相关问题