C-将输入存储到Malloc阵列(1D和2D)和打印中



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

 /* 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("%dn", 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("Vectorn");
    printf("Enter number of entries: ");
    scanf("%d", &n);
    printf("Enter %d reals: ", n);
    vector = read_vector(n);
    printf("Your Vectorn");
    print_vector(n,vector);
    free_vector(vector);
}

当我运行此功能时,它不允许我输入任何数字,它只是跳过并打印出0。我该如何解决?

尝试以下代码。几乎可以肯定,您要么不用警告来编译,要么忽略警告。所有警告都意味着一些事情,对初学者来说,所有警告都重要。使用GCC使用-wall选项,甚至-Pedantic。

正如Halfelf所指出的那样,您需要在读取循环中进行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("%fn", vec[i]);
    }
}
void free_vector(double *vec)
{
    free(vec);
}

int main()
{
    int n;
    double *vector;
    printf("Vectorn");
    printf("Enter number of entries: ");
    scanf("%i", &n);
    vector = read_vector(n);
    printf("Your Vectorn");
    print_vector(n, vector);
    free_vector(vector);
    return 0;
}

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

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

并注意您的{}。如果循环中只有一行,则不需要{},或者您必须使用一对。return子句必须不在循环中。

顺便说一句,在主函数末尾添加return 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;
}