"和N"有什么用?在这段代码?

时间:2018-01-10 17:41:56

标签: c++ while-loop logical-operators

C ++代码:

#include<iostream>
using namespace std;
int main()
{
    int N;
    cin>>N;
    int *A = new int[N];
    int i=0;
    for(i=0;i<N;i++)
        cin>>A[i];
    while(cout<<A[--N]<<' ' and N);
    delete[] A;
    return 0;
}

以相反的顺序将数组的整数打印在由空格分隔的单行中。 有谁知道什么是&#34;和N&#34;在cout声明中做什么?

4 个答案:

答案 0 :(得分:2)

这是一种神秘的写作方式:

while( (cout<<A[--N]<<' ') and (N != 0) );
//    output is successful and N is not equal to zero.

可以更清楚地写成:

for ( ; N != 0; --N)
{
    cout << A[N-1] << ' ';
}

由于理论上N可能是否定的,因此最好使用:

for ( ; N > 0; --N)
{
    cout << A[N-1] << ' ';
}

答案 1 :(得分:1)

N是一个整数变量,类型int的值可以隐式转换为bool(非零变为true,零变为false)。因此,当转换为operator<<的{​​{1}}的结果为真时,表达式基本上是sa执行 bool不等于零。逻辑上这段代码

N

等于:

while(cout<<A[--N]<<' ' and N);

由于短路,实际代码略有不同,但在这种情况下差异并不重要。

答案 2 :(得分:1)

部分and N也可以像while语句的&& N一样编写

while(cout<<A[--N]<<' ' and N);

已经指出可以像

一样重写
while(cout<<A[--N]<<' ' && N != 0);

检查循环的每次迭代中正在减少的NA[--N])是否不等于0.

因此循环以相反的顺序输出数组okf。

单词and是主令牌&&的所谓替代令牌。

答案 3 :(得分:0)

这只是一些程序员编写代码的方法。 它实际上写成

while( (cout<<A[--N]<<' ')  and (N != 0) );

基本上&#39;和&#39;当两个操作数都是非零值时,operator返回true。 所以cout会给出它打印的字符数,在这种情况下它们将不为零,直到N的值变为零,你的循环才会被执行。