唐柏tang 发表于 2014-8-25 19:18:30

快救救我

#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???????????????????

漩涡鸣人 发表于 2014-8-25 19:18:31

因为x=10是赋值不是判断,x==10才是判断,if成立之后x=x+1变成11,y原本等于8,y=y+1再y=y+2等于11

唐柏tang 发表于 2014-8-25 19:23:23

漩涡鸣人 发表于 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、?

漩涡鸣人 发表于 2014-8-25 19:31:21

唐柏tang 发表于 2014-8-25 19:23
那为什么x=11不再加2、?

else是否则的意思,if成立了,else控制的内容就不执行了,else默认只控制一个语句

大黑鱼 发表于 2014-8-25 21:06:16

楼上正解

唐柏tang 发表于 2014-8-25 21:20:57

大黑鱼 发表于 2014-8-25 21:06
楼上正解

#include "stdio.h"
void main()
{
intx=1,y,z;
y=(++x)*(++x);
    printf("%d",y);
   
}

为什么是9,不是6

唐柏tang 发表于 2014-8-25 21:23:48

漩涡鸣人 发表于 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

大黑鱼 发表于 2014-8-25 21:41:48

唐柏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一下,可以看看计算机是怎样执行的
在这他是先执行括号里面的

破ID 发表于 2014-8-25 22:10:25

路过

Angel丶L 发表于 2014-8-26 02:02:36

else
    x=x+2;
    y=y+2;
请问 else 没加括号会发生什么?、 诶 对了 else 就执行一句 所以 y+=2;又执行了 是在等判断好了、
你这段代码问题多了、
其他的楼上都解释了 C语言的 ==才是比较 = 是赋值记住了 。、。

gyixue 发表于 2014-8-26 20:35:38

真抠门才一个鱼币{:9_239:}

ghuibin 发表于 2014-8-27 21:40:59

我没有绳子

爆破2014 发表于 2014-8-30 01:32:38

如果吧
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都是一条起效 所以写的时候最好用花括号 不然很容易出错

风之残月 发表于 2014-8-31 21:20:27

判断的话不应该是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

verilog123 发表于 2014-9-1 10:06:11

我是过来打瓶酱油的、、、、、、

ygrong_2008 发表于 2014-9-1 21:48:48

解决的不错

小败类 发表于 2014-9-15 16:07:03

我建议还是规范化写程序,新手不熟容易在一些规则上出错,浪费时间
页: [1]
查看完整版本: 快救救我