【问题标题】:Specific Order for "for-Loop" Incrementation“for-Loop”增量的特定顺序
【发布时间】:2023-03-27 14:31:01
【问题描述】:

按照我使用的标准

for(int i=0; i<10; i++)
{...do something...}

但我经常在 C (char[]) 中遍历字符串,特别是通过为液晶显示器创建移位循环,我必须存储第一个字符并在移位后将其放在末尾。

因此我的问题是: 我可以像这样更改订单吗(我知道这是错误的代码!!):

uint8_t i;
for(i++;i=0; i<10;)
{...do something...}
uint8_t last_iterated_value = i;

正常风格的问题是,条件“i

换句话说,我想在循环之后查看 "{...}" direkt 中 i 的最后一个有效值。 当然我知道,我可以再次减少“i”。 我只是好奇是否有办法让 for 循环以查询结束。

非常感谢...

欧克尔

【问题讨论】:

  • 你能举个例子来说明你正在尝试做什么吗?喜欢i 值的列表以及您想要do something 的顺序吗?

标签: c for-loop iteration external


【解决方案1】:

以下是有效的

uint8_t last_iterated_value = i-1;

你也可以使用

int i=0;
do {
    ...do something...
} while(i<10);
uint8_t last_iterated_value = i;

或者

int i=-1;
while(++i<10) {
    ...do something...
}
uint8_t last_iterated_value = i;

【讨论】:

  • 我完全忘记了 do{}while()-Loop 我认为这是写我所期望的最自然的方式。在 for() 循环结束时关闭“break”的解决方案是我的 2. 选择 BUT 它需要一个额外的 if(i==9)-clausel 来确保循环结束的时间不会太早。
【解决方案2】:
for(int i=0; i<=SENTINEL_VALUE; i++)

【讨论】:

    【解决方案3】:

    您可以像这样制作循环:

    for (int i = 0; i <= 9; i++)
    

    或者,在循环之后,将i - 1 设为last_iterated _value

    【讨论】:

      【解决方案4】:

      您可以使用关键字break 退出循环而不增加i

      uint8_t i;
      for(i++;i=0; i<10;){
      ...do something...
      break;
      }
      uint8_t last_iterated_value = i;
      

      【讨论】:

        【解决方案5】:

        不,您不能更改 for 语句中项目的顺序并期望它们执行相同的操作。我想你想要的是这样的:

        int last_i;
        for (int i=0; i<10; i++)
        {
          ....do stuff ...
          last_i = i; //put this inside the loop instead of after
        }
        

        甚至这个:

        int last_i;
        for (int i=0; i<10; i++, last_i = i-1)
        {
          ....do stuff ...
        }
        

        【讨论】:

          【解决方案6】:

          我不确定我是否完全遵循您的问题。但是,如果这个想法是要捕获在迭代中实际使用的 i 的值,那么您可能应该在循环本身中捕获它。

          在最简单的情况下,您可以像这样在for 循环的增量部分设置它:

          int last_iterated_value = -1;
          for(int i=0; i<10; last_iterated_value = i++)
          {...do something...}
          

          但是,在for 循环提前中断的情况下,只有您可以决定是否在检测到break 条件时使用的值是否应该使用i 的值是否作为最后一个迭代值。

          【讨论】:

            【解决方案7】:

            请拨打main(),看看我是否理解您的问题

            void *workin(){
                int i=0,count=10;
            
                char v[]={' ',' ','>','>','>',' ',' ',' ',' ',' '};
                printf("\n");
                for(;;){
                    for(i=count-1;i>=0;i--){
                        v[(i+1)%(count)]=v[i];
                    }
                    fflush(stdout);
                    printf("processing %s \r",v);
                    sleep(1);
            
                }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-11-05
              • 2013-04-14
              • 1970-01-01
              • 2020-12-21
              • 1970-01-01
              • 2017-04-27
              • 2011-12-31
              • 2017-05-28
              相关资源
              最近更新 更多