作业有两个等号

use*_*und 1 c++ compiler-errors assignment-operator

以下代码我们总是使用,没关系,

while(int c=getchar() != 'q');
Run Code Online (Sandbox Code Playgroud)

但如果将int更改为如下所示的指针,则编译将出现错误.

#include <stdio.h>
int main(){
  int* c=0;
  if(int* a =c !=0)
    printf("ok");
}

error: cannot convert `bool' to `int*' in assignment
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?似乎优先事项已经改变.任何人都可以给我一个提示.如果我改变它,它会工作.

#include <stdio.h>
int main(){
  int* c=0;
  int* a;
  if((a =c) !=0)
    printf("ok");
}
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 6

因为优先, while(int c=getchar() != 'q');是错误的.它会一直保存比较返回的值的结果getchar()q.所以c永远是10.

你可能想要:

int c;
while((c = getchar()) != 'q');
      ^             ^
Run Code Online (Sandbox Code Playgroud)

或者可能

while((c = getchar()) != EOF && c != 'q');
Run Code Online (Sandbox Code Playgroud)