它在 { token 之前给了我预期的标识符

0 c++ integer if-statement operators

问题是我不知道问题是什么。我试图查找它,在我看来一切似乎都正确,但不知何故并非如此。

#include <iostream>

using namespace std;

int main()
{
    int s,a;
    cin >>a;
    if (a=!0)and(a<=1000000)
        {s=a*(a+1)/2;
        cout <<s;}

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 6

在 C++ 中,选择 if 语句定义如下

selection-statement: 
    if ( condition ) statement 
    if ( condition ) statement else statement 
Run Code Online (Sandbox Code Playgroud)

正如所见,条件应括在括号中。

另外你在这个子表达式中有一个错字

if (a=!0)and(a<=1000000)
    ****    
Run Code Online (Sandbox Code Playgroud)

就是这个表情

a=!0
Run Code Online (Sandbox Code Playgroud)

相当于

a = !0
Run Code Online (Sandbox Code Playgroud)

并表示将表达式赋值!0a等价于的变量

a = 1
Run Code Online (Sandbox Code Playgroud)

所以你必须写

if ( ( a != 0 ) and ( a <= 1000000 ) )
Run Code Online (Sandbox Code Playgroud)

或者

if ( a != 0 and a <= 1000000 )
Run Code Online (Sandbox Code Playgroud)

还要注意变量s应该声明为具有类型long long int

long long int s;
int a;
Run Code Online (Sandbox Code Playgroud)

否则赋值右侧的表达式

    s = a*(a+1)/2;
Run Code Online (Sandbox Code Playgroud)

可能导致溢出。

所以你应该写例如

long long int s;
int a;

//…

s = ( long long int )a * ( a + 1 ) / 2;
Run Code Online (Sandbox Code Playgroud)

考虑到所有所说的内容,您的程序可以如下所示。

#include <iostream>

using namespace std;

int main()
{
    long long int s;
    int a;

    cin  >> a;

    if ( a != 0 and a <= 1'000'000 )
    {
        s = ( long long int )a * ( a + 1 ) / 2;
        cout  << s  << '\n';
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果例如输入

1000000
Run Code Online (Sandbox Code Playgroud)

那么程序输出将是

500000500000
Run Code Online (Sandbox Code Playgroud)