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

How to use a function containing scanf() in the main function in C

标题描述了我正在尝试做的事情,但我收到了我从未声明过 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);
}

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

试试这个方法:

#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);
}

您的代码中有很多错误,首先 int main(),应该有 return 类型并且您的函数也没有 return 任何东西。 base1 未声明。

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

你的 main 函数中的 base1 在哪里? 它的基本原理是将 base1 作为 setBase1 的参数传递,但未声明 base1。

看来您对 C 编程还很陌生。有一件事,您根本无法在不使用指针的情况下使用 scanf 修改主函数变量的值。如果你读过 scanf,你会发现 scanf 需要一个变量的内存地址;这就是为什么 scanf 能够读取格式字符串并修改您的变量的原因。所以你想要实现的与 scanf 非常相似,你必须传递 base1 的地址;首先声明一下!因为这就是编译器所哭泣的。执行以下操作:

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

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

  2. 在函数 getBase1 中,你正在做一个 void return,但是你的函数签名告诉编译器你会 return 一个 int.所以你的函数应该是这样的:

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

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

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