如何在C中的main函数中使用包含scanf()的函数

时间:2017-09-19 13:23:02

标签: c printf scanf getter-setter

标题描述了我正在尝试做的事情,但我收到的错误消息是我从未声明过base1。我实际上知道这一点,但我不确定如何解决这个问题。

int getBase1(void);
int setBase1(double);

int main(void){
    getBase1();
    setBase1(base1);
}

int getBase1(void){
    printf("Please enter the length of a base: ");
    return;
}

int setBase1(double base1){
    scanf("%lf", &base1);
}

3 个答案:

答案 0 :(得分:6)

您必须使用指针,否则方法内的变量将不会指向相同的内存地址。使用指针,您将把值放在函数调用中传递的变量的内存地址中。 还有一件事,这样你就不需要返回值了。

尝试这种方式:

#include <stdio.h>
void getBase1(void);
void setBase1(double *base1);

int main(void){
    double base1;
    getBase1();
    setBase1(&base1);
    printf("%lf", base1);
}

void getBase1(void){
    printf("Please enter the length of a base: ");
}

void setBase1(double *base1){
    scanf("%lf", base1);
}

答案 1 :(得分:1)

好像你对C编程很陌生。这是一件事,你根本不能使用scanf来修改主函数变量的值而不使用指针。如果您阅读scanf,您会发现scanf需要变量的内存地址;这就是为什么scanf能够读取格式字符串并修改您的变量。所以你想要实现的与scanf非常相似,你必须传递base1的地址;首先申报它!因为那是编译器所哭泣的。做以下事情:

  1. 声明并传递要修改的变量的地址。像这样传递base1的地址:

    double base1; getBase1(); setBase1(&base1);

  2. 在函数getBase1中,您正在执行void返回,但是您的函数签名告诉编译器您将返回int。所以你的功能应该是这样的:

    void getBase1(void); void setBase1(double *);

  3. 由于您的setBase1正在接收地址,因此无需使用&符号(&amp;)。只需传递收到的指针值:

  4. void setBase1(double *pBase) { scanf("%lf", pBase); }

答案 2 :(得分:0)

您的代码中有很多错误,首先是int main(),应该有返回类型,而且您的函数也没有返回任何内容。 base1未声明。

error: ‘base1’ undeclared (first use in this function)
     setBase1(base1);
          ^

主要功能中的base1在哪里? 它基本上将base1作为setBase1的参数传递,但不声明base1。