标题: C语言为什么变量不能自减? [打印本页]

作者: WCM1998    时间: 2018-12-18 21:28
标题: C语言为什么变量不能自减?
while(1)
{a=b;a--}
假如b=100为什么a不能自减?谢谢
作者: angmall    时间: 2018-12-18 22:17
为何a能自减?
假如b=100
a=b 完成后 a=100
a--  完成后 a=99
不过a=b 完成后 还是a=100  为何你构思a变量能自减?

脑子不够用啊,换个游戏玩玩。

作者: dzbj    时间: 2018-12-18 23:30
你不断给a赋值为b b=100 可不是不能自减么 实际上减了 但又给赋值成100了
作者: WCM1998    时间: 2018-12-19 08:19
dzbj 发表于 2018-12-18 23:30
你不断给a赋值为b b=100 可不是不能自减么 实际上减了 但又给赋值成100了

谢谢、请问要怎才能实现自减呢、b是用户接键调节值、当判断某种情况下、a=b、然后a自已、但用户设定值b不变、谢谢

作者: 1092648746    时间: 2018-12-19 09:18
在a=b前加个if判断,满足情况时赋值,不满足情况时自减
作者: ssk7793    时间: 2018-12-19 09:18
分开,加判断
作者: ssk7793    时间: 2018-12-19 09:19
分开,加判断,即a的赋值放在判断用户输入b值后就传值给a,而a的自减可以放到定时器中
作者: sunny834243    时间: 2018-12-19 09:29
b的值赋给了a,完成后a减一,实际减了 但a的值又变成b=100因为b不断赋值给a
作者: dzbj    时间: 2018-12-19 09:54
WCM1998 发表于 2018-12-19 08:19
谢谢、请问要怎才能实现自减呢、b是用户接键调节值、当判断某种情况下、a=b、然后a自已、但用户设定值b不 ...

这种情况要处理应该只在需要的时候给a赋值一次 然后不能重复再赋值 比如你做个标记 这只是个思路 你试试吧

if(key==1)
{
flag_key=1;
}
if(flag_key==1)
{
flag_key=0;
b=100;
a=b;
}
a--;
作者: WCM1998    时间: 2018-12-19 10:58
dzbj 发表于 2018-12-19 09:54
这种情况要处理应该只在需要的时候给a赋值一次 然后不能重复再赋值 比如你做个标记 这只是个思路 你试试 ...

谢谢、还是不行的丶b是用户设定置、b的值赋给a、当某种情下、a的值自减、b的值不变、
while(1)
{a=b;
if(FLag1)
{OCRB1=200;}
else
{OCRB1=200+a;
diyms(2);
a--;
}
}
作者: namecy    时间: 2018-12-19 14:18
WCM1998 发表于 2018-12-19 10:58
谢谢、还是不行的丶b是用户设定置、b的值赋给a、当某种情下、a的值自减、b的值不变、
while(1)
{a=b;
...

惊了,你自己到底有没有思考啊,你这个while(1)是一直循环的,你每一次a--完了以后,你又给a重新赋值了,当然不行啊
作者: namecy    时间: 2018-12-19 14:23
while(1)
{
if(key==0)
{
a = b;
}
a--;
}
作者: 04160601    时间: 2018-12-19 14:36
加判断不可以吗?
作者: jll586    时间: 2018-12-19 14:43
似乎总是在走回头路啊,把a=b放while外面
作者: dzbj    时间: 2018-12-19 15:02
WCM1998 发表于 2018-12-19 10:58
谢谢、还是不行的丶b是用户设定置、b的值赋给a、当某种情下、a的值自减、b的值不变、
while(1)
{a=b;
...

好像你还是没明白 你这样当然不行啊 上来就给a赋值 那后边不管做什么 再进入主循环的时候 a都是=b的 效果等于后边什么都没干

我给你说的思路的意思 是让你想办法在需要给a赋值=b的时候才赋值 而不是每次进入while(1)都先给a赋值=b
作者: WCM1998    时间: 2018-12-19 18:47
dzbj 发表于 2018-12-19 15:02
好像你还是没明白 你这样当然不行啊 上来就给a赋值 那后边不管做什么 再进入主循环的时候 a都是=b的 效果 ...

这个值是赋给PWM的、调制脉宽所以必须在主循环里面
作者: 通天塔    时间: 2018-12-19 19:36
逻辑就有问题,刚减了1,又把a给赋值了,所以a会在100与99之间徘徊
作者: WCM1998    时间: 2018-12-19 20:05
通天塔 发表于 2018-12-19 19:36
逻辑就有问题,刚减了1,又把a给赋值了,所以a会在100与99之间徘徊

就是、不知道怎么写才能达到目的、求教、谢谢各位大侠
作者: zhuguanshun    时间: 2018-12-19 20:10
你一直在a=b啊
作者: yong761228    时间: 2018-12-19 20:33
while(1)
{a=b;a--;b=a;} 这样是否可以,如果这b一直是输入的,就用中间临时变量,b赋值给临时变量,临时变量再赋值给a,循环中不出现b. 反正要b也自减,否则一直循环,就不变了。
作者: dzbj    时间: 2018-12-19 20:51
yong761228 发表于 2018-12-19 20:33
while(1)
{a=b;a--;b=a;} 这样是否可以,如果这b一直是输入的,就用中间临时变量,b赋值给临时变量,临时 ...

你这个方法好 学习了
作者: WCM1998    时间: 2018-12-20 09:36
dzbj 发表于 2018-12-19 15:02
好像你还是没明白 你这样当然不行啊 上来就给a赋值 那后边不管做什么 再进入主循环的时候 a都是=b的 效果 ...

谢谢。按你的思路分开控制可以了
作者: WCM1998    时间: 2018-12-20 10:33
WCM1998 发表于 2018-12-20 09:36
谢谢。按你的思路分开控制可以了

但新的问题出现了

a--
if(a==10)
  {
    a=10;
  }为什么这句话控制不到a=10。假如b=100,哪a就该从100减到10停止,而是反复从255减到0一直循环
作者: sept80    时间: 2018-12-20 10:42
赋值放在循环外边
作者: dzbj    时间: 2018-12-20 15:01
WCM1998 发表于 2018-12-20 10:33
但新的问题出现了

a--

你发个整的程序 这么一节一节的 看不懂 另外 人家那个a减完了b=a是正路子 理解一下呗

uchar b=100;

while(1)
{
a=b;
a--;
b=a;
if(b==10)
{
b=100;
}
}
作者: 呼呼哒王玉哒    时间: 2018-12-20 16:36
因为b始终是100啊,进入循环里,b赋值给a,那么成了死循环
作者: a庚    时间: 2018-12-20 19:30
if(按键触发){b=getvalue();if(某种条件){a=b;a--;}}
作者: 海贼缺    时间: 2018-12-20 20:12
减了之后,又重新赋值了,亲。
作者: WCM1998    时间: 2018-12-21 08:03
a庚 发表于 2018-12-20 19:30
if(按键触发){b=getvalue();if(某种条件){a=b;a--;}}

谢谢、照你的方法成功了、再次感谢
作者: 开楼    时间: 2018-12-22 23:21
你把a=b;放到循环外边就行
作者: 木木小白    时间: 2018-12-23 00:27
因为赋值是由b的值给向a a--后a是99  但是while循环中 b不断把100给a 所以a的值最后还是99
作者: rrrr'    时间: 2018-12-23 11:28
首先a--后要加;,再你每次自减后又立马赋值了达不到你要求的自减效果
作者: Arvin0011    时间: 2018-12-24 09:49
此题有问题  假如b=100  每次循环将b赋值给a,即a=100,然后a自减得99但是下一轮循环开始时a又重新被赋予了值100,所以此题不成立
作者: robinsonlin    时间: 2018-12-24 12:15
授人以鱼不如授人以渔。
你这个完全是C语言的问题,跟51一点关系都没有。
给你个建议,下载一个notepad++,然后配置好MinGW环境,你可以在notepad++里面小段小段的调试你语句。 当然,也可以到keil里面,调用watch窗口,然后把a、b设置出来,这样就可以看到全程看到a、b的值的变化了。
作者: 周超然    时间: 2018-12-24 22:36
dzbj 发表于 2018-12-18 23:30
你不断给a赋值为b b=100 可不是不能自减么 实际上减了 但又给赋值成100了

正解,基础可以
作者: 卖苹果的乔布斯    时间: 2018-12-25 00:00
逻辑啊,这么简单的问题就别问了吧
作者: wh8010jky    时间: 2018-12-25 22:03
WCM1998 发表于 2018-12-19 08:19
谢谢、请问要怎才能实现自减呢、b是用户接键调节值、当判断某种情况下、a=b、然后a自已、但用户设定值b不 ...

while(1)
{
    if(a>=b)
   {a--;}
}
作者: 天风情    时间: 2018-12-26 10:37
没有判断条件,每次进主循环都会重新赋值




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1