我总是认为对于任何比较声明,即X == Y
或者X != Y
是格式,并且您将语句与&&
或一起链接||
.
有没有办法写X == (Y || Z)
而不是X == Y || X == Z
?
编辑:既然已经确定这不可能干净利落,那怎么办呢?
c++ operator-overloading logical-operators expression-templates
我在论坛上询问之前试图自己测试一下,但我测试这个的简单代码似乎不起作用.
#include <iostream>
using namespace std;
int main() {
cout << "Enter int: ";
int number;
cin >> number;
if (number==1||2||3) {
cout << "Your number was 1, 2, or 3." << endl;
}
else if (number==4||5||6) {
cout << "Your number was 4, 5, or 6." << endl;
}
else {
cout << "Your number was above 6." << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它总是返回第一个条件.我的问题是,是否有可能超过2个OR条件?或者我的语法不正确?
我不知道是否可能,但我想做的事情
int someval = 1;
if({1,2,3,4}_v.contains(someval ))
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将文字定义为:
std::vector<int> operator"" _v ( std::initializer_list<int> t )
{
return std::vector<int> (t);
}
Run Code Online (Sandbox Code Playgroud)
接受我得到的初始化列表
error: 'std::vector<int> operator"" _v(std::initializer_list<int> t)' has invalid argument list
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我真正想要的是最终摆脱像这样的东西
if(value == 1 || value ==2 || value == 3 ...
Run Code Online (Sandbox Code Playgroud)
写这样的东西真的很烦人,因为你期望语法
if value in (value1, value2 ...)
Run Code Online (Sandbox Code Playgroud)
或类似的东西.
背景:
通常,我们开发人员必须检查单个变量是否是众多选项中的至少一个.例如,
if ( (data == 125) || (data == 500) || (data == 750) )
{
/* ... do stuff ...*/
}
Run Code Online (Sandbox Code Playgroud)
这里的建议(尽管用C#编写)提供了一个优雅的解决方案来使用这样的switch
语句,
switch ( data )
{
case 125:
case 500:
case 750:
/* ... do stuff ...*/
break;
default:
/* ... do nothing ... */
break;
}
Run Code Online (Sandbox Code Playgroud)
这适用于"或"条件,但对于否定的"或"条件如下所述是丑陋的,
if ( !( (data == 125) || (data == 500) || (data == 750) ) )
{
/* ... do stuff ...*/
}
Run Code Online (Sandbox Code Playgroud)
这可以写成
switch ( …
Run Code Online (Sandbox Code Playgroud) cout << "Options:\n1: Change Name\n2: Change Password\n3: Change Address\n4: Withraw\n5: Deposit\nL: Log out\n>";
while (user_input2 != '1' && user_input2 != '2' && user_input2 != '3' && user_input2 != '4' && user_input2 != '5' && user_input2 != 'L')
{
cout << "Invalid input";
}
Run Code Online (Sandbox Code Playgroud)
那么我该如何缩短 while 条件呢?
我试着做:
cout << "Options:\n1: Change Name\n2: Change Password\n3: Change Address\n4: Withraw\n5: Deposit\nL: Log out\n>";
while (user_input2 != '1','2','3','4','5','L')
{
cout << "Invalid input";
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
编辑1:“我为我想做的事情添加了更多提示”
我在想创建一个更具扩展性的if语句的可能性。如果我们有一个条件,即一个变量可能是要满足if语句的多个不同值之一,则我尝试了以下这些格式:
这是默认答案。
if (variable == 23
|| variable == 52
|| variable == 58
|| variable == 62
|| variable == 93)
{
some function
}
Run Code Online (Sandbox Code Playgroud)
我以为这是C语言的新手。
if (variable == (23,52,58,62,93)
{
some function
}
Run Code Online (Sandbox Code Playgroud)
但是,使用逗号方法会收到警告,
warning: expression result unused [-Wunused-value]
Run Code Online (Sandbox Code Playgroud)
有没有人有可能对一个具有多个可能条件的变量制作if语句,而无需每次都复制和粘贴变量名?
在 C++ 中,有没有办法查看变量是否等于其中一个值?现在我必须做
if (fExt == "zip" | fExt == "7z" | fExt == "gz" | fExt == "tar")
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
然而,有没有更有效的方法呢?
所以我在这里得到了这部分代码:
string stringparam;
string stringparam1;
double d;
unsigned x;
cout << "Welcome" << endl;
cout << "Choose one (ASUS, MSI, Gigabyte, ASrock)" << endl;
cin >> stringparam;
while (stringparam != "ASUS" || "MSI" || "Gigabyte" || "ASrock")
{
cout << "you gave bad input \n" << endl;
cout << "Choose one (ASUS, MSI, Gigabyte, ASrock)" << endl;
cin >> stringparam;
}
Run Code Online (Sandbox Code Playgroud)
问题是即使我给他一个正确的答案,比如“华硕”,它仍然给我错误信息:“你的输入错误”我该怎么办?