【问题标题】:Fill array with scanf in C (last 5 entered numbers need to be printed)用 C 中的 scanf 填充数组(需要打印最后 5 个输入的数字)
【发布时间】:2015-10-19 12:03:57
【问题描述】:

我的学校作业有问题,如下所示:

"编写一个程序,重复向用户询问一个数字,如果用户的输入为 0,并且循环结束,则打印数组中的最后 5 个数字。如果扫描的数字少于 5 个,则未使用的值必须为 0"

它应该看起来像这样:

这是我的代码:

int main()
{
int i, array[4] = {};

while(1)
{
    printf("Next number: <0 = quit>: ");
    scanf("%i", &i);

    if(i!=0)
    {
        array[0] = array[1];
        array[1] = array[2];
        array[2] = array[3];
        array[3] = array[4];
        array[4] = i;
    }

    else
        break;
}

for(i=0; i<=4; i++)
{
    printf("Number %i is: %i\n", i+1, array[i]);
}

return 0;
}

但是当我打印数字时,最后一个数字 (array[4]) 是 0。

我做错了什么?

【问题讨论】:

  • 如果您将数组声明为array[4],它将有 4 个数字,并且其中的 last index 将是 3 而不是 4。将你的数组声明为array[5]
  • array[4] = {} 不会在 C、IIRC 中编译,尽管它可以在 C++ 中编译。

标签: c arrays pointers scanf


【解决方案1】:

你在这里声明一个长度为 4 的数组:

int i, array[4] = {};

这个数组的索引从 0 到 3,所以你永远不应该尝试访问 array[4],这将导致未定义的行为

【讨论】:

  • @arnofrederiks,如果你是新手,你会因为这个答案而享有盛誉。干得好!
猜你喜欢
  • 2022-11-13
  • 1970-01-01
  • 2019-04-25
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多