【问题标题】:Why isn't the letter final char ('g') printed?为什么不打印字母 final char ('g')?
【发布时间】:2018-08-24 22:52:46
【问题描述】:

我知道打印的第一个字母是 b c d e f。为什么不打印'g'?当我 5 岁时,打印“f”。 i 减为 4,因此它应该进入 for 循环。相反,尽管 i 小于 6 (strlen(arr)-1=6),但它不会进入。

char* arr = "abcdefg";  //String
int i;
for (i = 1; i < strlen(arr)-1; i+=2)  //i is incremented by 2.
{
    printf("%c ", arr[i--]);    //Here i is decremented
}

返回 0;

【问题讨论】:

  • 这只是胡闹。
  • i=5,然后 i-- 变为 4,然后 i+=2 变为 6,然后 for 循环不再执行,因为 i 为 6。
  • 调试器在这里派上用场。
  • 循环控制变量属于循环本身,你不应该在循环内部改变它。如果你做了愚蠢的事情,期待愚蠢的结果。
  • 除了摆弄控制变量,i &lt; strlen(arr)-1;会漏掉最后一个字符,应该是i &lt; strlen(arr);

标签: c for-loop decrement


【解决方案1】:

这是一个逻辑问题,我会尽力说明这一点


1º loop -> i = 1, arr[--i] = a

2º loop -> i = 3, arr[--i] = c

3º loop -> i = 5, arr[--i] = e

循环结束// i = 7, strlen(arr)-1 = 5


注意:我没有在 C 中调试,但正如我所说,这是一个逻辑 问题...

我认为在发生这种情况时尝试使用 IDE 进行调试是个好主意

【讨论】:

    【解决方案2】:

    在 for 循环中写入 i&lt;strlen(arr)i&lt;=strlen(arr)-1 而不是 i&lt;strlen(arr)-1; 因为当它打印 f i=5 的值时,它会将 i 递减 1,然后将 i=4 的值递增i 的值乘以 2,然后是 i=6,其中您的条件为 false,即 i&lt;6

    【讨论】:

      【解决方案3】:

      试试这个:

       for (i = 1; i < strlen(arr); i+=2)
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      猜你喜欢
      • 2020-11-09
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      相关资源
      最近更新 更多