这件事给了我错误。 C语言

时间:2015-11-01 17:31:02

标签: c

我该如何解决这个问题?我想scanf()为d的值,我该怎么做?我需要一些帮助。感谢。

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

void LerDeputados(int d) {
    printf("Indique o número de deputados a repartir: ");
    scanf("%d",&d);
}
int main(void) {
    int d;
    LerDeputados(d);
    printf("%d",d);

    return 0;
}

3 个答案:

答案 0 :(得分:4)

这里的问题是,当您将变量d传递给LerDeputados函数时,它会通过值传递,这意味着它已被复制。该值在函数内部已正确更改,但它只更改副本,更改副本当然不会更改原件。

您需要做的是通过引用传递变量。不幸的是,C没有,但它可以通过使用指针来模拟。换句话说,您需要将指向变量d的指针传递给LerDeputados函数。

void LerDeputados(int *d) { ... }

然后使用address-of运算符调用它:

LerDeputados(&d);

答案 1 :(得分:2)

您的代码中存在一些错误。首先,您需要返回scan函数中LerDeputados(int d)获得的值。您还需要将此值分配给您在d中创建的main(),将代码更改为:

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

int LerDeputados() {
    int d ;
    printf("Indique o número de deputados a repartir: ");
    scanf("%d",&d);
    return d ;
}
int main(void) {
    int d;
    d = LerDeputados();
    printf("%d",d);

    return 0;
}

或者你可以使用指针(虽然需要更高级的水平)

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

void LerDeputados(int* pd) {
    printf("Indique o número de deputados a repartir: ");
    scanf("%d",pd);
}
int main(void) {
    int d;
    LerDeputados(&d);
    printf("%d",d);

    return 0;
}

我的建议是在进一步深入编程世界之前阅读一些好的C书。

希望它有所帮助;)

答案 2 :(得分:1)

您需要阅读C ..

的基础知识

scanf()更改为

scanf("%d",&d);

稍微解释一下

scanf()需要存储读取值的变量的地址。要获取int变量的地址,请先使用&运算符。

那就是解决错误

现在,在您的代码中,d中的变量void LerDeputados(int d)是一个局部变量,与d中的main()完全不同。这种情况正在发生,因为您正在将d的值传递给void LerDeputados(int d)。您必须将地址传递给void LerDeputados()

将代码更改为

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

void LerDeputados(int* d) {
    printf("Indique o número de deputados a repartir: ");
    scanf("%d",d);
}
int main(void) {
    int d;
    LerDeputados(&d);
    printf("%d",d);

    return 0;
}