找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3189|回复: 27
收起左侧

C语言for语句怎么转换成if句

  [复制链接]
ID:712826 发表于 2020-4-27 16:09 | 显示全部楼层 |阅读模式
void delay(uint time)
{
        uint i,j;
        for(i=0;i<time;i++)
                for(j=0;j<100;j++);
}
怎么转换成if句实现相同的功能??

回复

使用道具 举报

ID:311846 发表于 2020-4-27 17:27 | 显示全部楼层
延时函数干嘛用if?,硬是要用暂时只能想到goto语句了,
回复

使用道具 举报

ID:452950 发表于 2020-4-27 17:27 | 显示全部楼层
for是循环语句,if是条件语句,没听说过可以直接转换的,while倒是可以代替for
回复

使用道具 举报

ID:712826 发表于 2020-4-27 18:01 | 显示全部楼层
权威人物 发表于 2020-4-27 17:27
延时函数干嘛用if?,硬是要用暂时只能想到goto语句了,


萌新,萌新
回复

使用道具 举报

ID:712826 发表于 2020-4-27 18:02 | 显示全部楼层
xxpp2011 发表于 2020-4-27 17:27
for是循环语句,if是条件语句,没听说过可以直接转换的,while倒是可以代替for

能否改下让我参谋参谋
回复

使用道具 举报

ID:452950 发表于 2020-4-27 18:22 | 显示全部楼层
//一级循环:
uchar j;
for(j=0;j<100;j++);
/*****************/
/*****************/
uchar j=0;
while(j<100)j++;
回复

使用道具 举报

ID:452950 发表于 2020-4-27 18:32 | 显示全部楼层
本帖最后由 xxpp2011 于 2020-4-27 19:40 编辑

void delay(uint time)
{
        uint i=0,j=0;
        while(i<time)
        {                j=0;
                while(j<100)j++;
                i++;
        }
}
回复

使用道具 举报

ID:582109 发表于 2020-4-27 20:00 | 显示全部楼层
循环三个要素,初始值    循环条件    趋于循环结束的语句    if充当循环条件的判断  其他两个加上 你就能改成if形式 ,你品品,细品、
回复

使用道具 举报

ID:723681 发表于 2020-4-27 22:02 | 显示全部楼层
循环结构 和 判断结构是不同概念,把for改成while倒是可以
回复

使用道具 举报

ID:592807 发表于 2020-4-27 22:05 | 显示全部楼层
  1. void delay(uint time)
  2. {
  3.   uint i;
复制代码





回复

使用道具 举报

ID:272269 发表于 2020-4-28 01:54 | 显示全部楼层
那用递归调用就行
本人不习惯用goto  
用goto更简单
unsigned char DelayTime
void delay(unsigned char temp)
{
    if(DelayTime == 0)
    {
        DelayTime = temp;
    }
    else
    {
        DelayTime --;
        if(DelayTime)
        {
            delay(0);
        }

    }

}
回复

使用道具 举报

ID:283908 发表于 2020-4-28 07:55 | 显示全部楼层
感谢楼主的提问。看到楼上凌晨1:54分的发帖,证明论坛的学习交流气氛很好。

作为一个从事电器行业工作了30年左右的60后,深刻的感受到,只有科技创新才能强国。

希望新的一代科技工作者,不要被教条主义束缚,要学好书本上人家的基础东西活用。

创新 创新 一定要创新。

希望能看到其他帖子。
回复

使用道具 举报

ID:513268 发表于 2020-4-28 09:05 | 显示全部楼层
void delay(uint time)
{
        uint i,j;
  i=0;
   while(i<time)
  {
      i++;
     j=0;
    while(j<100)
      j++;
  }
  
}
回复

使用道具 举报

ID:188773 发表于 2020-4-28 09:09 | 显示全部楼层
for循环是在这里执行循环函数,等待执行完成再去执行其他任务。下面是一个按键的判断函数,没有用for延时消抖,用的是if,没执行一次循环累加1,这样主循环的执行时间变短,适合按键延时特别多,后面又程序需要及时刷新的程序,当让也可以用中断。
                if(KEY[ucKey_num]==0)                  //按键1按下
                                        {
                                        keytime_Y[ucKey_num]++;        //按下消抖计时加1
                                        keytime_N[ucKey_num]=0;        //未按下消抖计时清零       
                                                if(keytime_Y[ucKey_num]>Const_Keysnake_time) //消抖滤波 ,受程序循环影响延时时间,需要程序完成后校准Const_Keysnake_time值
                                                {
                                                keytime_Y[ucKey_num]=0;         //按下消抖计时清零
                                                bitSet(key_value,ucKey_num+1);        //是否按下标志位
                                                }
                                        }
                        else            //按键1未按下
                                        {
                                        keytime_N[ucKey_num]++;                //未按下消抖计时加1
                                        keytime_Y[ucKey_num]=0;          //按下消抖计时清零
                                                if(keytime_N[ucKey_num]>Const_Keysnake_time)
                                                {
                                                keytime_N[ucKey_num]=0;
                                                bitClear(key_value,ucKey_num+1);
                                                }
                                        }
回复

使用道具 举报

ID:739063 发表于 2020-4-28 09:29 | 显示全部楼层
一个循环 一个延时 根本就是2个东西
回复

使用道具 举报

ID:739901 发表于 2020-4-28 10:45 | 显示全部楼层
用loop语句实现循环,if语句判断是否跳出循环。if语句是不带有循环的哦。其实for语句里边的条件判断,也是if语句一样的功能,不过for语句集成了,使用起来更加简便了
回复

使用道具 举报

ID:728400 发表于 2020-4-28 11:12 | 显示全部楼层
循环结构和判断结构是不同的概念,for和while时循环结构的,不能跟判断结构if进行互换
回复

使用道具 举报

ID:332444 发表于 2020-4-29 05:00 | 显示全部楼层
无标题.png

回复

使用道具 举报

ID:740821 发表于 2020-4-29 12:41 | 显示全部楼层
把 for(i=0;i<time;i++)                 for(j=0;j<100;j++);换成
回复

使用道具 举报

ID:740821 发表于 2020-4-29 12:44 | 显示全部楼层
i=0;j=0;while(i<time){{while(j<100)j++;}i++};
回复

使用道具 举报

ID:592807 发表于 2020-4-29 13:21 | 显示全部楼层

没写全,补充
void delay(uint time)
{
   uint i;   i = 0;
while(1)
{
i++;
if(i >= time)
brak;
else
;

}

}
回复

使用道具 举报

ID:426861 发表于 2020-4-29 13:34 | 显示全部楼层
这个循环换成if不是更麻烦吗
回复

使用道具 举报

ID:740875 发表于 2020-4-29 14:01 | 显示全部楼层
if a=0; then b=1; else b=2; 判断语句,如果的意思。 if-else是判断语句,if(条件表达式,返回一个布尔型变量),如果是真,那就执行if后面的语句,并且跳过else后面的语句,要是返回假,则执行else里面的语句,if里面的语句就不会得到执行~
回复

使用道具 举报

ID:282850 发表于 2020-4-29 15:01 | 显示全部楼层
for与while做空循环来延时是最直观简单的。天下大部分人都习惯这样,你如果真不喜欢for,喜欢if,可以用goto,可以用Timer+if来做。
回复

使用道具 举报

ID:515547 发表于 2020-4-29 17:31 | 显示全部楼层
不行的 for是循环,你要用if的话 还是得用循环
回复

使用道具 举报

ID:703227 发表于 2020-4-30 01:38 | 显示全部楼层
for和if,两个意思,用if和while可以实现
回复

使用道具 举报

ID:236035 发表于 2020-4-30 13:28 | 显示全部楼层
for也要用到判断,while更是如此,它们的内核就是if。在CODE中IF是最基本的指令,任何指令都可用它实现,只是看起来就没那么简明了。
改成IF的代码如下:
void delay(uint time)
{
        uint i=0,j;

        if(i<time)
        {
              i++;
              j=0;
              if(j<100)     j++;
        }
}
回复

使用道具 举报

ID:740996 发表于 2020-4-30 14:04 | 显示全部楼层
写time个if嵌套起来
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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