0

このコードでは、ゼロになっているように見えます。作成した関数で変数の長さを変更できない理由については、よくわかりません。どんな助けでも役に立ちます。

     #include <stdio.h>
double get_length(double a);
int main(int argc, char* argv[])
{
    double length = 0;
    get_length(length);
    printf("%lf", length);
    return 0;
}
double get_length(double a)
{
    printf("What is the rectangle's length?\n");
    scanf("%lf", &a);
    return a;
}

印刷すると0.0000が返されます

4

2 に答える 2

6

戻り値を保存していません。変化する:

get_length(length);

に:

length = get_length(length);

これを行う場合、パスする必要はありlengthません。

もう 1 つの方法は、アドレスを渡すことです。

#include <stdio.h>

void get_length(double * a);

int main(int argc, char* argv[]) {
    double length = 0;
    get_length(&length);
    printf("%f", length);
    return 0;
}

void get_length(double * a) {
    printf("What is the rectangle's length?\n");
    scanf("%lf", a);
}

%f、notがin%lfの正しい書式指定子であることに注意してください。ただし、の使用は正しいです。doubleprintf()%lfscanf()

于 2013-10-20T22:10:12.213 に答える
3

C は「値渡し」です。これは、値が実際にコピーされることを意味します。したがって、参照を使用して値を変更しても、元の参照は実際には変更されません。

これには 2 つの方法があります。

1) ローカル値に保存してから、戻り値をキャプチャします。

length = get_length()
...
double get_length()
{
    double a;
    printf("What is the rectangle's length?\n");
    scanf("%lf", &a);
    return a;
}

2) ポインタを渡します:

get_length(&length)
...
double get_length(double *length)
{
    printf("What is the rectangle's length?\n");
    scanf("%lf", length);
}
于 2013-10-20T22:13:16.937 に答える