将输入存储到malloc数组(1d和2d)并打印

时间:2012-10-23 03:54:27

标签: c arrays malloc

我正在尝试从用户那里获取输入并将其存储到一个数组中并将其打印出来:我有两个功能:

 /* Read a vector with n elements: allocate space, read elements,
    return pointer */
double *read_vector(int n){
    double *vec = malloc(n * sizeof(double));

    int i;
    for (i = 0; i < n; i++)
       vec[i] = n;

    return vec;
}

,打印功能为:

void print_vector(int n, double *vec){
    int i;
    for (i = 0; i < n; i++) {
       printf("%d\n", vec[i]);
    }
}

主要功能是:

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

double *read_vector(int n);
void print_vector(int n, double *vec);
void free_vector(double *vec);

int main(){
    int n;
    double *vector;
    /* Vector */
    printf("Vector\n");
    printf("Enter number of entries: ");
    scanf("%d", &n);
    printf("Enter %d reals: ", n);
    vector = read_vector(n);
    printf("Your Vector\n");
    print_vector(n,vector);
    free_vector(vector);
}

当我运行它时,它不会让我输入任何数字,它只是跳过它并打印出0。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

尝试以下代码。你几乎肯定要么没有编译警告,要么忽略警告。所有警告都意味着什么,对初学者来说,它们都很重要。使用gcc使用-Wall选项,甚至是-pedantic。

正如halfelf指出的那样,你需要在read循环中使用scanf,但它需要是一个指针(&amp; vec [i])。总是在主要结束时返回一些东西。还要检查malloc的返回值,它可能会失败并返回一个空指针。

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

double *read_vector(int n)
{
    double *vec = malloc(n * sizeof(double));
    int i;

    for (i = 0; i < n; i++) {
        printf("Enter number %i of %i: ", i + 1, n);
        scanf("%lf", &vec[i]);
    }
    return vec;
}

void print_vector(int n, double *vec)
{
    int i;

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

void free_vector(double *vec)
{
    free(vec);
}


int main()
{
    int n;
    double *vector;

    printf("Vector\n");
    printf("Enter number of entries: ");
    scanf("%i", &n);
    vector = read_vector(n);
    printf("Your Vector\n");
    print_vector(n, vector);
    free_vector(vector);
    return 0;
}

答案 1 :(得分:1)

read_vector(int n)函数的for循环中:

for (i=0; i<n; i++) 
   vec[i] = n;       // this should be scanf("%lf",vec+i) to read input from stdin

并注意到您的{}。如果循环中只有一行,则{}不是必需的,或者你必须使用它们。 <{1}}子句必须不在循环中。

顺便说一句,在主要功能的末尾添加return

答案 2 :(得分:0)

简单..你忘了写scanf ..!

double *read_vector(int n)
{

    double *vec = malloc(n * sizeof(double));

    int i;
    for (i = 0; i < n; i++)
       scanf("%d",&vec[i]);

    return vec;
}