Arrays 输出数组的最后一个数字-C中的动态内存分配

Arrays 输出数组的最后一个数字-C中的动态内存分配,arrays,c,visual-studio,command-line,dynamic-memory-allocation,Arrays,C,Visual Studio,Command Line,Dynamic Memory Allocation,以下是作业: 编写一个程序来打印双精度数组中的最后一个元素。数组应具有动态长度。长度应取自命令行参数。如果没有向程序提供命令行参数,则数组长度应为5。数组应该动态创建,并填充以0.0->0.1->0.2开始的值 例如: 调用您的程序:mycalc.exe 42 程序的输出将在本例中:我的最后一个数组元素是:4.1 然而,当我运行这段代码时,无论我如何更改命令行参数,甚至我没有命令行参数,它总是显示0.0。有什么问题,有人能纠正我的代码吗。 我赶时间,非常感谢你 下面是我写的代码: #inclu

以下是作业:

编写一个程序来打印双精度数组中的最后一个元素。数组应具有动态长度。长度应取自命令行参数。如果没有向程序提供命令行参数,则数组长度应为5。数组应该动态创建,并填充以0.0->0.1->0.2开始的值

例如:

调用您的程序:mycalc.exe 42

程序的输出将在本例中:我的最后一个数组元素是:4.1


然而,当我运行这段代码时,无论我如何更改命令行参数,甚至我没有命令行参数,它总是显示0.0。有什么问题,有人能纠正我的代码吗。 我赶时间,非常感谢你

下面是我写的代码:

#include <stdio.h>  // standard input/output functions
#include <string.h>
#include <stdlib.h>

#define last_digit_of_Matrikelnummer 5

int main(int argc, char* argv[])
{
    int i;
    int DynArraylen;
    double* DynArray;

    

    if (argc == 1)
    {
        DynArraylen = last_digit_of_Matrikelnummer;
        DynArray = (double*)malloc(DynArraylen * sizeof(double));
        DynArray[0] = 0.0;

        for (i = 1; i < DynArraylen; i++)
        {
            DynArray[i] = DynArray[i - 1] + 0.1;
        }
        printf("My last array element is: %.1f\n", DynArray[i]);

        //Free memory
        free(DynArray);
    }
    else if (argc == 2)
    {
        //Dynamic memory allocation
        DynArraylen = (int)argv[1];
        DynArray = (double*)malloc(DynArraylen * sizeof(double));
        DynArray[0] = 0.0;

        //check 
        if (DynArray == NULL)
        {
            printf("out of memory\n");
        }
        else
        {
            DynArray[0] = 0.0;
            for (i = 1; i < DynArraylen; i++)
            {
                DynArray[i] = DynArray[i - 1] + 0.1;
            }
            printf("My last array element is: %.1f\n", DynArray[i]);
        }

        //Free memory
        free(DynArray);
    }


    return 0;
}
#包括//标准输入/输出函数
#包括
#包括
#定义矩阵NUMMER 5的最后一位数字
int main(int argc,char*argv[])
{
int i;
int DynArraylen;
双*DynArray;
如果(argc==1)
{
DynArraylen=矩阵的最后一位;
DynArray=(双*)malloc(DynArraylen*sizeof(双));
DynArray[0]=0.0;
对于(i=1;i
在循环之后

for (i = 1; i < DynArraylen; i++)

strtol
函数包括字符串验证,您确实需要检查该字符串,以确保调用后
DynArraylen
有效。

printf(“我的最后一个数组元素是:%.1f\n”,DynArray[i])最后一个参数应该是
DynArray[i-1])
DynArray[DynArraylen-1]
DynArraylen=(int)argv[1]这不是将字符串转换为int的正确方法。OT:不应该在每个条件块中重复相同的代码。唯一需要有条件的代码行是设置
DynArrayLen
的代码行。在那之后,所有的代码都是一样的。为什么会这样?在循环“for(i=1;ii
是正确的。这意味着它将在
i==DynArraylen
时结束(因为
i
将为false)。
DynArraylen = strtol(argv[1], NULL, 10);