数组大小基于用户输入

时间:2015-09-22 08:46:35

标签: c++ c arrays

我正在处理的程序要求用户输入一个整数值,然后根据该值打印一个零的数组。我已经能够在预设数组大小时执行此操作,但是当尝试在用户输入上执行此操作时,我会遇到编译器错误。我已经尝试过研究修复但是我没有发现任何事情,因为大多数修复使用dynamic memory allocation我们还没有教过如何使用。这是我到目前为止提出的代码。

在我试图找出错误的原因时,我发现如果我不使用0初始化数组,则数组将打印到用户输入的大小,当然数组输出数字是完全随机的。

当我初始化数组的大小时,我得到错误variable-sized object may not be initialized,并在j的方括号内指向int j, ar[j]={20};的小箭头。

还有其他方法没有使用dynamic memory allocation吗?

#include <stdio.h>

int main(void){

    int i;
    int j, ar[j]={0};

    printf("Please enter the value:");
    scanf("%d",&j);

    for(i=0; i<j;i++){
        printf("%i\n",ar[j]);
    }

2 个答案:

答案 0 :(得分:0)

 int j, ar[j]={0};   // you should not do this 

这不正确,因为j未正式化。

但这将在C99​​中得到支持 -

 int j;
 printf("Please enter the value:");
 scanf("%d",&j);         // take input in j 
 int  ar[j];             // this statement int ar[j]={0} will give compilation error

 for(i=0;i<j;i++){
   ar[i]=0;        
   printf("%d",ar[i]);
 }

答案 1 :(得分:-1)

我认为没有任何方法可以使用动态内存分配。

我建议您使用malloccalloc代替C. calloc在分配后清除内存。

#include <stdio.h>
#include <stdlib.h>

int main(void){

    int i;
    int j, *ar;

    printf("Please enter the value:");
    scanf("%d",&j);
    ar = calloc(j, sizeof(int));
    if (ar == NULL) return 1;

    for(i=0; i<j;i++){
        printf("%i\n",ar[j]);
    }

    free(ar);
    return 0;
}

使用new[]对C ++有用。

#include <stdio.h>

int main(void){

    int i;
    int j, *ar;

    printf("Please enter the value:");
    scanf("%d",&j);
    ar = new int[j];

    for(i=0; i<j;i++){
        printf("%i\n",ar[j]);
    }
    delete[] ar;
    return 0;
}