在for循环中使用printf()

时间:2017-07-01 18:52:48

标签: c printf

尝试此操作时(下面的代码),控制台甚至不会请求输入值,然后吐出一个随机数(可能来自先前存储在该位置的数字)。

为什么这不起作用,我该如何解决?

int main( ) {
    int arr[3];

    for(int i = sizeof(arr); i <= 0; i--) {
        scanf("%d", &arr[i]);
   }
   printf("%d", arr[2]);

   return 0;
}

5 个答案:

答案 0 :(得分:2)

有两件事是错的。

假设您想要数组中的元素数量,则使用以下命令完成:

size_t len = sizeof(arr) / sizeof(*arr)

sizeof给出实际大小(为arr分配的字节数。

  1. 您应该从len - 1而不是len开始。
  2. 注意:数组索引 0基于而不是基于1,因此数组元素是从0 to 2建立的索引但是你会试图访问arr [3] ],这可能导致未定义的行为。

    1. 你写了i <= 0。所以,我从让我们说2开始,是2 <= 0? NO!
    2. 因此它永远不会进入循环。正确的条件是i >= 0

      int len = sizeof(arr) / sizeof(*arr);
      for(int i = len - 1; i >= 0; i--)
      

      好吧,我不知道你为什么要接受逆序输入,但一般惯例是使用输入来输入:

      size_t len = sizeof(arr)/sizeof(*arr);
      for (i = 0; i < len; i++)
      {
          // take input
      }
      

      编辑: 从其他评论看来,您似乎并不了解for循环。

      查看此answer

      请评论任何进一步的澄清。

答案 1 :(得分:1)

i <= 0

由于i的初始值大于零,代码永远不会进入循环。

答案 2 :(得分:0)

由于i--会降低i的值,并且循环条件为i <=0以启动循环,i必须为0或者为负。因为{{ 1}}将返回12(3个元素,每个元素有4个字节(int有4个字节)),该值将为posivite,大于0所以我们需要更改循环条件以检查arr[3]是否为正< / p>

i

答案 3 :(得分:0)

值得注意的是,在C语言中,除了Java / Python等语言之外,您必须明确知道数组的长度,sizeof NOT 为您提供项目数量在阵列中。

int main() {
    int arr[3];
    int itemsInArray = 3;

    for(int i = itemsInArray-1; i >= 0; i--) {
        scanf("%d", &arr[i]);
    }
    printf("%d", arr[2]);

   return 0;
};

答案 4 :(得分:-2)

您的代码存在一些问题:首先,sizeof(arr)不会像您想象的那样返回“3”; “arr”是指向arr [0]的指针,因此您正在请求int指针的大小 其次,i&lt; = 0阻止循环甚至被执行 最后,请将数组设置为零,同时声明最佳实践,即:
    int arr [3] = {0};

编辑:我的错误拼写了我的想法:你要求分配给阵列的整个内存区域的大小。
以下评论已得到纠正。