找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4412|回复: 38
打印 上一主题 下一主题
收起左侧

C语言为什么变量不能自减?

  [复制链接]
跳转到指定楼层
楼主
ID:284571 发表于 2018-12-18 21:28 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
while(1)
{a=b;a--}
假如b=100为什么a不能自减?谢谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2018-12-18 22:17 | 只看该作者
为何a能自减?
假如b=100
a=b 完成后 a=100
a--  完成后 a=99
不过a=b 完成后 还是a=100  为何你构思a变量能自减?

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

使用道具 举报

板凳
ID:47286 发表于 2018-12-18 23:30 | 只看该作者
你不断给a赋值为b b=100 可不是不能自减么 实际上减了 但又给赋值成100了
回复

使用道具 举报

地板
ID:284571 发表于 2018-12-19 08:19 来自手机 | 只看该作者
dzbj 发表于 2018-12-18 23:30
你不断给a赋值为b b=100 可不是不能自减么 实际上减了 但又给赋值成100了

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

使用道具 举报

5#
ID:393699 发表于 2018-12-19 09:18 | 只看该作者
在a=b前加个if判断,满足情况时赋值,不满足情况时自减
回复

使用道具 举报

6#
ID:424598 发表于 2018-12-19 09:18 来自手机 | 只看该作者
分开,加判断
回复

使用道具 举报

7#
ID:424598 发表于 2018-12-19 09:19 来自手机 | 只看该作者
分开,加判断,即a的赋值放在判断用户输入b值后就传值给a,而a的自减可以放到定时器中
回复

使用道具 举报

8#
ID:449551 发表于 2018-12-19 09:29 | 只看该作者
b的值赋给了a,完成后a减一,实际减了 但a的值又变成b=100因为b不断赋值给a
回复

使用道具 举报

9#
ID:47286 发表于 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--;
回复

使用道具 举报

10#
ID:284571 发表于 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--;
}
}
回复

使用道具 举报

11#
ID:276442 发表于 2018-12-19 14:18 | 只看该作者
WCM1998 发表于 2018-12-19 10:58
谢谢、还是不行的丶b是用户设定置、b的值赋给a、当某种情下、a的值自减、b的值不变、
while(1)
{a=b;
...

惊了,你自己到底有没有思考啊,你这个while(1)是一直循环的,你每一次a--完了以后,你又给a重新赋值了,当然不行啊
回复

使用道具 举报

12#
ID:276442 发表于 2018-12-19 14:23 | 只看该作者
while(1)
{
if(key==0)
{
a = b;
}
a--;
}
回复

使用道具 举报

13#
ID:444864 发表于 2018-12-19 14:36 | 只看该作者
加判断不可以吗?
回复

使用道具 举报

14#
ID:357520 发表于 2018-12-19 14:43 | 只看该作者
似乎总是在走回头路啊,把a=b放while外面
回复

使用道具 举报

15#
ID:47286 发表于 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
回复

使用道具 举报

16#
ID:284571 发表于 2018-12-19 18:47 来自手机 | 只看该作者
dzbj 发表于 2018-12-19 15:02
好像你还是没明白 你这样当然不行啊 上来就给a赋值 那后边不管做什么 再进入主循环的时候 a都是=b的 效果 ...

这个值是赋给PWM的、调制脉宽所以必须在主循环里面
回复

使用道具 举报

17#
ID:275479 发表于 2018-12-19 19:36 | 只看该作者
逻辑就有问题,刚减了1,又把a给赋值了,所以a会在100与99之间徘徊
回复

使用道具 举报

18#
ID:284571 发表于 2018-12-19 20:05 来自手机 | 只看该作者
通天塔 发表于 2018-12-19 19:36
逻辑就有问题,刚减了1,又把a给赋值了,所以a会在100与99之间徘徊

就是、不知道怎么写才能达到目的、求教、谢谢各位大侠
回复

使用道具 举报

19#
ID:253526 发表于 2018-12-19 20:10 | 只看该作者
你一直在a=b啊
回复

使用道具 举报

20#
ID:405193 发表于 2018-12-19 20:33 | 只看该作者
while(1)
{a=b;a--;b=a;} 这样是否可以,如果这b一直是输入的,就用中间临时变量,b赋值给临时变量,临时变量再赋值给a,循环中不出现b. 反正要b也自减,否则一直循环,就不变了。
回复

使用道具 举报

21#
ID:47286 发表于 2018-12-19 20:51 | 只看该作者
yong761228 发表于 2018-12-19 20:33
while(1)
{a=b;a--;b=a;} 这样是否可以,如果这b一直是输入的,就用中间临时变量,b赋值给临时变量,临时 ...

你这个方法好 学习了
回复

使用道具 举报

22#
ID:284571 发表于 2018-12-20 09:36 | 只看该作者
dzbj 发表于 2018-12-19 15:02
好像你还是没明白 你这样当然不行啊 上来就给a赋值 那后边不管做什么 再进入主循环的时候 a都是=b的 效果 ...

谢谢。按你的思路分开控制可以了
回复

使用道具 举报

23#
ID:284571 发表于 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一直循环
回复

使用道具 举报

24#
ID:450546 发表于 2018-12-20 10:42 | 只看该作者
赋值放在循环外边
回复

使用道具 举报

25#
ID:47286 发表于 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;
}
}
回复

使用道具 举报

26#
ID:450847 发表于 2018-12-20 16:36 | 只看该作者
因为b始终是100啊,进入循环里,b赋值给a,那么成了死循环
回复

使用道具 举报

27#
ID:80221 发表于 2018-12-20 19:30 | 只看该作者
if(按键触发){b=getvalue();if(某种条件){a=b;a--;}}
回复

使用道具 举报

28#
ID:451035 发表于 2018-12-20 20:12 | 只看该作者
减了之后,又重新赋值了,亲。
回复

使用道具 举报

29#
ID:284571 发表于 2018-12-21 08:03 来自手机 | 只看该作者
a庚 发表于 2018-12-20 19:30
if(按键触发){b=getvalue();if(某种条件){a=b;a--;}}

谢谢、照你的方法成功了、再次感谢
回复

使用道具 举报

30#
ID:439279 发表于 2018-12-22 23:21 | 只看该作者
你把a=b;放到循环外边就行
回复

使用道具 举报

31#
ID:452415 发表于 2018-12-23 00:27 来自手机 | 只看该作者
因为赋值是由b的值给向a a--后a是99  但是while循环中 b不断把100给a 所以a的值最后还是99
回复

使用道具 举报

32#
ID:452503 发表于 2018-12-23 11:28 | 只看该作者
首先a--后要加;,再你每次自减后又立马赋值了达不到你要求的自减效果
回复

使用道具 举报

33#
ID:446674 发表于 2018-12-24 09:49 | 只看该作者
此题有问题  假如b=100  每次循环将b赋值给a,即a=100,然后a自减得99但是下一轮循环开始时a又重新被赋予了值100,所以此题不成立
回复

使用道具 举报

34#
ID:451718 发表于 2018-12-24 12:15 | 只看该作者
授人以鱼不如授人以渔。
你这个完全是C语言的问题,跟51一点关系都没有。
给你个建议,下载一个notepad++,然后配置好MinGW环境,你可以在notepad++里面小段小段的调试你语句。 当然,也可以到keil里面,调用watch窗口,然后把a、b设置出来,这样就可以看到全程看到a、b的值的变化了。
回复

使用道具 举报

35#
ID:449525 发表于 2018-12-24 22:36 来自手机 | 只看该作者
dzbj 发表于 2018-12-18 23:30
你不断给a赋值为b b=100 可不是不能自减么 实际上减了 但又给赋值成100了

正解,基础可以
回复

使用道具 举报

36#
ID:303240 发表于 2018-12-25 00:00 来自手机 | 只看该作者
逻辑啊,这么简单的问题就别问了吧
回复

使用道具 举报

37#
ID:134430 发表于 2018-12-25 22:03 | 只看该作者
WCM1998 发表于 2018-12-19 08:19
谢谢、请问要怎才能实现自减呢、b是用户接键调节值、当判断某种情况下、a=b、然后a自已、但用户设定值b不 ...

while(1)
{
    if(a>=b)
   {a--;}
}
回复

使用道具 举报

38#
ID:426861 发表于 2018-12-26 10:37 | 只看该作者
没有判断条件,每次进主循环都会重新赋值
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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