为什么这个for循环在第二个索引中结束?

时间:2016-12-12 11:58:12

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

我写了一个程序,它的职责是从用户那里读取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有关。

7 个答案:

答案 0 :(得分:3)

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

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

应该是

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

或循环不会执行,因为i<0不是真的开始。

并且正如@WeatherVane在评论中所指出的那样:

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

应该是

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

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

答案 1 :(得分:3)

如果你想让循环向下计数,那么这个循环

<?php
$isSaveDisabled = true;
$isCreateDisabled=false;
if(isset($_POST['save']))
    {
        echo 'Hello robin';
        $isCreateDisabled=false;
    }
if(isset($_POST['create']))
    {
        echo 'Byeeee robin';
        $isSaveDisabled = false;
    }

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" href="BootStrap/css/bootstrap.min.css">
        <link rel="stylesheet" href="css/stylesheet.css">
        <title></title>
        <script type="text/javascript">

         function myFunction()
        {
            document.getElementById("myH2").style.color = "#ff0000";

        }

        </script>
    </head>
    <body >
        <div class="container jumbotron">

        <form action="" method="post">

            <div class="btn-group-xs">
                <label for="name" id="myH2">Name</label>
                <input type="text" name="name" >
            <button type="submit" id="btn1" name="save" <?php echo $isSaveDisabled?'disabled':''; ?>onclick="myFunction();">Save</button>
            <button type="submit" id="btn2" name="create" <?php echo $isCreateDisabled?'disabled':'';?>>Create</button>
            </div>


        </form>
        </div>


    </body>
</html>

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

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

答案 2 :(得分:3)

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

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

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

更改:

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

2。条件检查for循环中的更改:    我们打印反向数组时i >= 0

正确的循环应该是

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

答案 3 :(得分:1)

第二个循环必须是  "packages":{ "file-saver":{ "main":"FileSaver.js", "format": "cjs" } } 因此索引将从19到0(20数字)

试试这个

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

答案 4 :(得分:1)

试试这个:

#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 :(得分:1)

有(ⅰ= N-1; I&GT; = 0; I - )

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

答案 6 :(得分:1)

你的第二个循环条件,&#34; i&lt; 0&#34;,开头是假的。它应该是&#34; i&gt; -1&#34 ;.您还需要确保第一次使用索引19而不是20来调用printf。这就是为什么我使用预减量运算符 - i。

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