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 の戻り値を確認してください。失敗して null ポインターが返される可能性があります。

#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

{そして、あなたと}そこに注意してください。{ループに1 行しか}なく、必要でない場合、またはそれらのペアを使用する必要があります。句はループのreturn外にある必要があります。

return 0ところで、メイン関数の最後に追加します。

于 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 に答える