【问题标题】:Why this for loop ends in the second index?为什么这个 for 循环在第二个索引处结束?
【发布时间】:2017-04-27 07:00:07
【问题描述】:

我写了一个程序,它的职责是从用户那里读取 20 个数字并将它们放在一个列表中,然后它从底部到起点打印数组中的值。

但程序在从输入中读取第二个值后恰好停止。

源代码:

#include <stdio.h>
#define N 20
int main(void)
{
    int numbers[N];
    int i;

    for(i=0;i<N;i++)
    {
        scanf("%i", &numbers[i]);
    }

    for(i=N;i<0;i--)
    {
        printf("%i", numbers[i]);
    }
    return 0;
}

我使用 Dev-C++ 5.6.3 作为我的 IDE,TDM-GCC 4.8.1 作为我的编译器。但我不知道这是否与 IDE 相关。

【问题讨论】:

  • 第二个循环不是说i&gt;0 吗?
  • scanf("%i", numbers[i]); ==> scanf("%i", &amp;numbers[i]);
  • 您的代码有&amp; 还是没有?请不要更改问题。
  • 投票结束这个简单的错字。
  • @WeatherVane 否 它有 &,我忘了添加它,但知道问题是可以的。

标签: c arrays for-loop dev-c++


【解决方案1】:

如果你想让你的第二个循环倒计时,那么

 for(i=N;i<0;i--)

应该是

 for(i=N;i>0;i--)

否则循环将不会执行,因为i&lt;0 不正确。

并且,正如@WeatherVane 在 cmets 中指出的那样:

scanf("%i", numbers[i]);

应该是

scanf("%i", &numbers[i]);

因为您需要传递一个指向整数的指针,您希望用scanf 返回的数字填充。

【讨论】:

    【解决方案2】:

    如果你想让循环倒数,那么这个循环

    for(i=N;i<0;i--)
    

    从错误的索引开始,并且未通过测试条件。应该是

    for(i = N - 1; i >= 0; i--)
    

    【讨论】:

      【解决方案3】:

      第二个循环必须是 for(i=N;i&gt;=0;i--) 所以索引将从 19 到 0(20 号)

      试试这个

      #include <stdio.h>
      #define N 20
      int main(void)
      {
          int numbers[N];
          int i;
      
          for(i = 0; i < N; i++)
          {
              scanf("%i", &numbers[i]);
          }
      
          for(i = N ; i >= 0; i--)
          {
              printf("%i ", numbers[i]);
          }
          return 0;
      }
      

      【讨论】:

        【解决方案4】:

        试试这个:

        #include <stdio.h>
        #define N 20
        int main(void)
        {
            int numbers[N];
            int i;
        
            for(i = 0; i < N; i++)
            {
                scanf("%i", &numbers[i]);
            }
        
            for(i = N - 1; i >= 0; i--)
            {
                printf("%i ", numbers[i]);
            }
            return 0;
        }
        

        记住 scanf 总是使用指针。

        【讨论】:

          【解决方案5】:

          for(i=N-1;i>=0;i--)

          对于数组中的 n 项,最后一个索引将是 n-1。您需要从 n-1 索引迭代到第 0 索引。

          【讨论】:

            【解决方案6】:

            您的第二个循环的条件“i -1”。您还需要确保第一次调用 printf 时使用索引 19 而不是 20。这就是我使用预减量运算符的原因 - i。

            for(i = N; i > -1; )
            {
                printf("%i\n", numbers[--i])
            };
            

            【讨论】:

              【解决方案7】:

              下面给出的 for 循环存在一些问题。

              for(i=N;i<0;i--)
              {
                  printf("%i", numbers[i]);
              }
              return 0;
              

              如果您想从底部到起点打印数组。 您可以在 for 循环中进行一些更改。

              变化:

              1- 在将值分配给 i 时改变循环: i = N-1 -> 因为数组的大小是 20,数组索引从 0 开始。 它将从 19 变为 0 以打印所有 20 个数据值。

              2- for 循环中条件检查的变化: i &gt;= 0 在我们打印反向数组时。

              正确的for循环应该是

              for(i = N-1; i >= 0; i--)
              {
                  printf("%i", numbers[i]);
              }
              

              【讨论】:

                猜你喜欢
                • 2016-12-12
                • 1970-01-01
                • 2023-01-16
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-04-18
                • 1970-01-01
                • 2019-12-23
                相关资源
                最近更新 更多