还是小弟我!还是一样的有关问题

还是我!还是一样的问题!
大家来看一下这两个码!
# include <stdio.h>
main ()
{
int x, y, p;
printf ("input x:");//input 输入
scanf ("%d", &x);//
    p = 1*(x<2) + 2*(x>=2 && x<20) + 3*(x>=20);
switch (p)
{
case 1: y = 2*x; break;
case 2: y = 10-3*x; break;
case 3: y = 6*x-5;
}
printf ("x=%d p=%d y=%d\n", x, p, y);
}

               {2x  (x<2)
这个是y={10-3x  (2<=x<20)  是一个分段函数 !这是书上的!是对的!我仿照这个写了一个!
               {6x-5  (x>=20)



        {1  (x>0)
求y={0  (x=0)    所以我写了:
        {-1  (x<0)
# include <stdio.h>
main ()
{
int x, y, p;
printf ("输入一个值x:");
scanf ("%d", &x);
p = 1* (x>0) + 2* (x=0) + 3* (x<0);
switch (p)
{
case 1: y = 1; break;
case 2: y = 0; break;
case 3: y = -1;
}
printf ("x=%d p=%d y=%d\n", x, p, y);
}

两个函数的要求一样!就y的求值试 不同!   但 为毛!我写这个 就不行????
  注: 这个函数 用if  可以写!我也写出来了!    我就想问一下  为啥  第一个码可以用!  我写的  第二个就用不了????
------解决方案--------------------
x=0和x==0不是一回事!
------解决方案--------------------
引用:
x=0和x==0不是一回事!

+1

 对于==的使用,编程规范一般要求某个变量和数字相等比较,数字放在左操作数,变量名放在右操作数,比如这样写:
0 == x
------解决方案--------------------
请你以后写判断的时候常量写在前面
0 == x  当你写成0=x的时候编译器就会报错的