1

我正在尝试从用户那里获取输入并将其存储到一个数组中并打印出来:我有 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("%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。我该如何解决?

4

3 回答 3

3

试试下面的代码。您几乎可以肯定要么没有编译警告,要么忽略警告。所有警告都有意义,对于初学者来说,它们都很重要。使用 gcc 使用 -Wall 选项,甚至使用 -pedantic。

正如halfelf 指出的那样,您的读取循环中需要一个scanf,但它必须是一个指针(&vec[i])。总是在 main 的末尾返回一些东西。还要检查 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;
}
于 2012-10-23T04:12:42.713 回答
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

并注意你{}那里。如果循环中只有一行,{并且}没有必要,或者您必须使用其中一对。该return子句必须在循环之外。

顺便说一句,return 0在 main 函数的末尾添加。

于 2012-10-23T03:58:48.183 回答
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;
}
于 2015-01-22T14:19:42.843 回答