一个小问题,在线等.

时间:2022-04-11 17:34:21

int i=1,j=2,k=3;
if((i=j)==k)
   ......//执行语句

请详细的解释一下if((i=j)==k)这句的判断过程。
先谢了!

14 个解决方案

#1


i=j外面的第一个括号优先级最高,所以先是将j的值2赋给i;

然后判断i是否等于k,既是2是否等于3,是false,所以不会执行下面的......

这个 很简单啊

#2


顺便问一句:标准C里面:
void main(){
   int a=1;
   printf("%d\n",a);
   int b=2;
   printf("%d\n",b);
}//报错

是不是所有的变量必须都在方法的最前面定义?执行语句过后就不允许了?

#3


if((i=j)==k) 

先把j赋值给i,然后判断i==k

#4


如果是在C++中,可以使用这种方式;但是如果是纯C,则必须先声明变量。

#5


引用 2 楼 Wing198812 的回复:
顺便问一句:标准C里面: 
void main(){ 
  int a=1; 
  printf("%d\n",a); 
  int b=2; 
  printf("%d\n",b); 
}//报错 

是不是所有的变量必须都在方法的最前面定义?执行语句过后就不允许了?

标准c是这样的,比如必须在main最开定义变量后面就不准许定义

#6


回2楼,在TC里是这样的,不过C++里就随便了,什么时候用什么时候定义都行。
强烈建议初学C的用VC6.0作为开发环境,比TC方便太多了,就连国二等级考试都改VC环境了。

#7


先进行括号里的赋值运算(i=j)
再进行比较运算()==k

变量的声明必须在 语句块开始

void main(){
  int a=1;
  int b=2;
  printf("%d\n",a);
  printf("%d\n",b);
}


void main(){
  int a=1;
  printf("%d\n",a);


  int b=2;
  printf("%d\n",b);
 }

}


这两个应该都可以

#8


首先执行赋值操作,将j的值赋给i,这样i的值就是2.
这样语句就简化为:
if(2 == k)
{
    //dosomething
}
也就是拿k和2作比较

#9


回6楼:
我是在VC6.0里面写的,只不过保存的文件名是Test.c,而不是Test.cpp而已,那为什么还是不行?
我是学Java的,接触C不久,还请多指教

#10


#include <stdio.h>

void main()
{
int i=1,j=2,k=3;
printf("%d",i=j);
printf("%d",(i=j)==k);
}


我写了个测试的小程序,楼主运行下就知道了。先赋值,然后再判断那个等号是否成立

#11


改成test.cpp编译肯定没问题

#12


引用 9 楼 Wing198812 的回复:
回6楼: 
我是在VC6.0里面写的,只不过保存的文件名是Test.c,而不是Test.cpp而已,那为什么还是不行? 
我是学Java的,接触C不久,还请多指教

.c就是按c标准编译的所以不能带C++特性,专心学c的就.c不要.cpp
.cpp的可以兼容c

#13


引用 9 楼 Wing198812 的回复:
回6楼: 
我是在VC6.0里面写的,只不过保存的文件名是Test.c,而不是Test.cpp而已,那为什么还是不行? 
我是学Java的,接触C不久,还请多指教


再turboc2.0下面才是.c文件,而再vc6.0下面,头文件是.h文件,而你的这种文件后缀名要写成.cpp文件。
其实,你在建立文件的时候完全可以不写后缀名,新建一种文件,你可以直接写名字,系统自动给你补全后缀名

至于(i=j)==k),其实,就是看运算顺序。先括号,i赋值j,然后判断i == K 

#14


引用 2 楼 Wing198812 的回复:
顺便问一句:标准C里面:
void main(){
int a=1;
printf("%d\n",a);
int b=2;
printf("%d\n",b);
}//报错

是不是所有的变量必须都在方法的最前面定义?执行语句过后就不允许了?

gcc下编译没问题

#1


i=j外面的第一个括号优先级最高,所以先是将j的值2赋给i;

然后判断i是否等于k,既是2是否等于3,是false,所以不会执行下面的......

这个 很简单啊

#2


顺便问一句:标准C里面:
void main(){
   int a=1;
   printf("%d\n",a);
   int b=2;
   printf("%d\n",b);
}//报错

是不是所有的变量必须都在方法的最前面定义?执行语句过后就不允许了?

#3


if((i=j)==k) 

先把j赋值给i,然后判断i==k

#4


如果是在C++中,可以使用这种方式;但是如果是纯C,则必须先声明变量。

#5


引用 2 楼 Wing198812 的回复:
顺便问一句:标准C里面: 
void main(){ 
  int a=1; 
  printf("%d\n",a); 
  int b=2; 
  printf("%d\n",b); 
}//报错 

是不是所有的变量必须都在方法的最前面定义?执行语句过后就不允许了?

标准c是这样的,比如必须在main最开定义变量后面就不准许定义

#6


回2楼,在TC里是这样的,不过C++里就随便了,什么时候用什么时候定义都行。
强烈建议初学C的用VC6.0作为开发环境,比TC方便太多了,就连国二等级考试都改VC环境了。

#7


先进行括号里的赋值运算(i=j)
再进行比较运算()==k

变量的声明必须在 语句块开始

void main(){
  int a=1;
  int b=2;
  printf("%d\n",a);
  printf("%d\n",b);
}


void main(){
  int a=1;
  printf("%d\n",a);


  int b=2;
  printf("%d\n",b);
 }

}


这两个应该都可以

#8


首先执行赋值操作,将j的值赋给i,这样i的值就是2.
这样语句就简化为:
if(2 == k)
{
    //dosomething
}
也就是拿k和2作比较

#9


回6楼:
我是在VC6.0里面写的,只不过保存的文件名是Test.c,而不是Test.cpp而已,那为什么还是不行?
我是学Java的,接触C不久,还请多指教

#10


#include <stdio.h>

void main()
{
int i=1,j=2,k=3;
printf("%d",i=j);
printf("%d",(i=j)==k);
}


我写了个测试的小程序,楼主运行下就知道了。先赋值,然后再判断那个等号是否成立

#11


改成test.cpp编译肯定没问题

#12


引用 9 楼 Wing198812 的回复:
回6楼: 
我是在VC6.0里面写的,只不过保存的文件名是Test.c,而不是Test.cpp而已,那为什么还是不行? 
我是学Java的,接触C不久,还请多指教

.c就是按c标准编译的所以不能带C++特性,专心学c的就.c不要.cpp
.cpp的可以兼容c

#13


引用 9 楼 Wing198812 的回复:
回6楼: 
我是在VC6.0里面写的,只不过保存的文件名是Test.c,而不是Test.cpp而已,那为什么还是不行? 
我是学Java的,接触C不久,还请多指教


再turboc2.0下面才是.c文件,而再vc6.0下面,头文件是.h文件,而你的这种文件后缀名要写成.cpp文件。
其实,你在建立文件的时候完全可以不写后缀名,新建一种文件,你可以直接写名字,系统自动给你补全后缀名

至于(i=j)==k),其实,就是看运算顺序。先括号,i赋值j,然后判断i == K 

#14


引用 2 楼 Wing198812 的回复:
顺便问一句:标准C里面:
void main(){
int a=1;
printf("%d\n",a);
int b=2;
printf("%d\n",b);
}//报错

是不是所有的变量必须都在方法的最前面定义?执行语句过后就不允许了?

gcc下编译没问题