不使用分号计算表达式

d3v*_*pro 2 c++ obfuscation

鉴于输入如68 + 32,我们必须在我们的程序中不使用分号进行评估.如果它将在if或for循环中?参考:https://www.spoj.pl/problems/EXPR2/

Joe*_*ams 6

你可以使用这样的结构:

if (i++) {}
Run Code Online (Sandbox Code Playgroud)

但是,仍然没有回答如何声明变量.但是,你可以做的一个技巧是:

#include <iostream>

int main(double x, double y) {
    if ((x = 1)) {}
    if ((y = 2)) {}
    if (std::cout << x << ", " << y << std::endl) {}
}
Run Code Online (Sandbox Code Playgroud)

当然,你会收到在主参数列表中使用错误类型的警告,但它会起作用.


Jua*_*uan 6

您可以使用if和逗号运算符,如下所示:

if( expr1, expr2, expr3, ... ) {}
Run Code Online (Sandbox Code Playgroud)

这相当于

expr1;
expr2;
expr3;
...
Run Code Online (Sandbox Code Playgroud)

要使用没有任何警告的变量,您可以定义一个函数来接收您从main调用所需的数据类型,如下所示:

void myFunc(int a, double b) {
    if ( expr1, expr2 ) { }
}
int main() {
    if ( myFunc(0, 0), 0 ) { }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您需要, 0在main中添加,否则会引发错误,因为不会忽略void返回.