鱼C论坛

 找回密码
 立即注册
查看: 2347|回复: 16

快救救我

[复制链接]
发表于 2014-8-25 19:18:30 | 显示全部楼层 |阅读模式
1鱼币
#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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 19:18:31 | 显示全部楼层
因为x=10是赋值不是判断,x==10才是判断,if成立之后x=x+1变成11,y原本等于8,y=y+1再y=y+2等于11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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、?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 19:31:21 | 显示全部楼层
唐柏tang 发表于 2014-8-25 19:23
那为什么x=11不再加2、?

else是否则的意思,if成立了,else控制的内容就不执行了,else默认只控制一个语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 21:06:16 | 显示全部楼层
楼上正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-25 21:20:57 | 显示全部楼层

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

为什么是9,不是6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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()
{
int  x=1,y,z;
  y=(++x)*(++x);
    printf("%d",y);
   
}

为什么是9,不是6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 21:41:48 | 显示全部楼层
唐柏tang 发表于 2014-8-25 21:20
#include "stdio.h"
void main()
{

这是debug的结果:
194:  int  x=1,y,z;
00401028   mov         dword ptr [ebp-4],1      ;将1 赋给 dword ptr [ebp-4]
195:    y=(++x)*(++x);   这是将要执行的C语言代码
0040102F   mov         eax,dword ptr [ebp-4]   ;  将dword ptr [ebp-4]值赋给eax  ( equ x )  = 1
00401032   add         eax,1    ;                        eax  + 1        eax = 2   
00401035   mov         dword ptr [ebp-4],eax   ;     将  eax  赋值给dword ptr [ebp-4]
00401038   mov         ecx,dword ptr [ebp-4]   ;     将dword ptr [ebp-4] 赋值给ecx = 2
0040103B   add         ecx,1                              ;    ecx = ecx + 1,   ecx = 3
0040103E   mov         dword ptr [ebp-4],ecx   ;   将ecx  赋值给dword ptr [ebp-4]  ,其值是3
00401041   mov         edx,dword ptr [ebp-4]  ;        将dword ptr [ebp-4] 赋值给 edx,  edx = 3
00401044   imul        edx,dword ptr [ebp-4]   ;    edx * dword ptr [ebp-4]
00401048   mov         dword ptr [ebp-8],edx   ;   结果放在dword ptr [ebp-8]
在遇到不明白的时候可以自己debug一下,可以看看计算机是怎样执行的
在这他是先执行括号里面的

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 22:10:25 | 显示全部楼层
路过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 02:02:36 | 显示全部楼层
  else
    x=x+2;
    y=y+2;
请问 else 没加括号会发生什么?、 诶 对了 else 就执行一句 所以 y+=2;又执行了 是在等判断好了、
你这段代码问题多了、
其他的楼上都解释了 C语言的 ==才是比较 = 是赋值记住了 。、。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 20:35:38 | 显示全部楼层
真抠门  才一个鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-27 21:40:59 | 显示全部楼层
我没有绳子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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  都是一条起效 所以写的时候最好用  花括号 不然很容易出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-1 10:06:11 | 显示全部楼层
我是过来打瓶酱油的、、、、、、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-1 21:48:48 | 显示全部楼层
解决的不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-15 16:07:03 | 显示全部楼层
我建议还是规范化写程序,新手不熟容易在一些规则上出错,浪费时间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 23:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表