快救救我
#include "stdio.h"void main()
{
int x=6,y=8;
if(x=10)
{
x=x+1;
y=y+1;
}
else
x=x+2;
y=y+2;
printf("%d %d",x,y);
}
为什么x=11,y=11???????????????????
因为x=10是赋值不是判断,x==10才是判断,if成立之后x=x+1变成11,y原本等于8,y=y+1再y=y+2等于11 漩涡鸣人 发表于 2014-8-25 19:20
因为x=10是赋值不是判断,x==10才是判断,if成立之后x=x+1变成11,y原本等于8,y=y+1再y=y+2等于11
那为什么x=11不再加2、? 唐柏tang 发表于 2014-8-25 19:23
那为什么x=11不再加2、?
else是否则的意思,if成立了,else控制的内容就不执行了,else默认只控制一个语句 楼上正解 大黑鱼 发表于 2014-8-25 21:06
楼上正解
#include "stdio.h"
void main()
{
intx=1,y,z;
y=(++x)*(++x);
printf("%d",y);
}
为什么是9,不是6 漩涡鸣人 发表于 2014-8-25 19:20
因为x=10是赋值不是判断,x==10才是判断,if成立之后x=x+1变成11,y原本等于8,y=y+1再y=y+2等于11
#include "stdio.h"
void main()
{
intx=1,y,z;
y=(++x)*(++x);
printf("%d",y);
}
为什么是9,不是6 唐柏tang 发表于 2014-8-25 21:20
#include "stdio.h"
void main()
{
这是debug的结果:
194:intx=1,y,z;
00401028 mov dword ptr ,1 ;将1 赋给 dword ptr
195: y=(++x)*(++x); 这是将要执行的C语言代码
0040102F mov eax,dword ptr ;将dword ptr 值赋给eax( equ x )= 1
00401032 add eax,1 ; eax+ 1 eax = 2
00401035 mov dword ptr ,eax ; 将eax赋值给dword ptr
00401038 mov ecx,dword ptr ; 将dword ptr 赋值给ecx = 2
0040103B add ecx,1 ; ecx = ecx + 1, ecx = 3
0040103E mov dword ptr ,ecx ; 将ecx赋值给dword ptr ,其值是3
00401041 mov edx,dword ptr ; 将dword ptr 赋值给 edx,edx = 3
00401044 imul edx,dword ptr ; edx * dword ptr
00401048 mov dword ptr ,edx ; 结果放在dword ptr
在遇到不明白的时候可以自己debug一下,可以看看计算机是怎样执行的
在这他是先执行括号里面的
路过 else
x=x+2;
y=y+2;
请问 else 没加括号会发生什么?、 诶 对了 else 就执行一句 所以 y+=2;又执行了 是在等判断好了、
你这段代码问题多了、
其他的楼上都解释了 C语言的 ==才是比较 = 是赋值记住了 。、。 真抠门才一个鱼币{:9_239:} 我没有绳子 如果吧
if(x=10) 改为 if(x==10)
else
x=x+2;
y=y+2;
改为
else
{
x=x+2;
y=y+2;
}
这样就是你预期的结果 x=8 y=10
是不是这样?
如果你不是这样想的就当我是路过
if或else都是一条起效 所以写的时候最好用花括号 不然很容易出错
判断的话不应该是x = 10,而是x == 10,这里 x = 10,因为10为真,所以 x = x + 1得到 x = 10 + 1 = 11,y = y + 1得到 y = 8 + 1 = 9,else下面的两句没有缩进或用{}括起来,所以只有x = x + 2属于else的作用域,最后会执行y = y + 2,得到 y = 9 + 2 = 11 我是过来打瓶酱油的、、、、、、 解决的不错 我建议还是规范化写程序,新手不熟容易在一些规则上出错,浪费时间
页:
[1]