标题描述了我正在尝试做的事情,但我收到的错误消息是我从未声明过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);
}
答案 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的地址;首先申报它!因为那是编译器所哭泣的。做以下事情:
声明并传递要修改的变量的地址。像这样传递base1的地址:
double base1;
getBase1();
setBase1(&base1);
在函数getBase1
中,您正在执行void返回,但是您的函数签名告诉编译器您将返回int
。所以你的功能应该是这样的:
void getBase1(void);
void setBase1(double *);
由于您的setBase1
正在接收地址,因此无需使用&符号(&amp;)。只需传递收到的指针值:
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。