我目前正在编写一个分配程序,该程序需要使用一个函数来使用户能够输入3个vairables。我很难将这些变量返回到我的main函数,我已经看到过之前提出过的其他类似问题并试图使用指针但是无法使它工作。我的尝试如下:
#include <stdio.h>
#include <stdlib.h>
//Function Header for positive values function
double get_positive_value(double* topSpeed, double* year, double*
horsepower);
int main(void){
int reRunProgram = 0;
while (reRunProgram==0)
{
//variable declarations
double tS;
double yR;
double hP;
int menuOption;
int menuOption2;
//menu
printf("1.Create Bugatti\n");
printf("2.Display Bugatti\n");
printf("3.Exit\n");
//user choice
scanf("%d", &menuOption);
//Create car
if (menuOption == 1) {
//run the get positive values function
get_positive_value (&tS, &yR, &hP);
printf("top speed is %lf\n", tS);
}
//Display car (but no car created)
else if (menuOption == 2){
printf("error no car created\n");
}
//Exit
else if (menuOption ==3){
exit(EXIT_FAILURE);
}
}
return 0;
}
double get_positive_value(double* topSpeed, double* year, double*
horsepower)
{
do {
printf("Please enter the top speed of the bugatti in km/h\n");
scanf("%lf", &topSpeed);
} while(*topSpeed<=0);
do{
printf("Please enter the year of the bugatti, in four digit form (e.g. 1999)\n");
scanf("%lf", &year);
} while(*year<=0);
do{
printf("Please enter the horsepower of the bugatti\n");
scanf("%lf", &horsepower);
} while(*horsepower<=0);
}
答案 0 :(得分:2)
除非将它们包装在struct
中,否则无法从函数返回多个值。就指针而言,您可以修改从main传递到函数中的值。我认为你在这里做错了:
scanf("%lf", &topSpeed);
由于topSpeed
是指向double的指针,因此您只需要传递从main传递的变量的地址(而不是指针变量的地址)。你应该这样做:
do {
printf("Please enter the top speed of the bugatti in km/h\n");
scanf("%lf", topSpeed);
} while(*topSpeed<=0);
do {
printf("Please enter the year of the bugatti, in four digit form (e.g. 1999)\n");
scanf("%lf", year);
} while(*year<=0);
do {
printf("Please enter the horsepower of the bugatti\n");
scanf("%lf", horsepower);
} while(*horsepower<=0);
我希望这会有所帮助。
答案 1 :(得分:1)
您声明了变量tS
,yR
&amp; hP
函数中的main
,并通过引用get_positive_value()
函数传递它们。
因此传递变量的地址。不是变量本身。
在get_positive_value()
中,您尝试使用scanf()
将一些值放入3个变量中,您应该在这些变量中给出变量的地址但是给出地址< / i>相反。
&topSpeed
中的get_positive_value()
与&(&tS)
中的main()
类似。
由于您已通过引用传递了它们,因此在get_positive_value()
中,tS
中的地址为yR
,hP
,topSpeed
,{{1 },year
。
horsepower
本身就是topSpeed
的地址。不是tS
。
你应该改变
&topSpeed
到
scanf("%lf", &topSpeed);
(同样适用于其他2个变量)
因为scanf("%lf", topSpeed);
在topSpeed
中拥有变量tS
的地址。因此,如果您说main()
,您正试图访问地址&topSpeed
&#39;的地址。
答案 2 :(得分:0)
当你这样做的时候
*someptr
你在这个指针指向的内存地址处要求输入值。
执行scanf
并使用&x
作为变量时,可以执行此操作,因为您希望将值存储在该内存地址中。因此,当您使用指针执行scanf
时,不使用*
因为传递值而不是地址,以将值存储在。
您也不使用&
,因为您传递指针的内存地址而不是您实际想要修改的内存地址。这是你的主要错误。
最后,您可以使用return
同时struct
这些值,但指针更优雅。
希望我帮助你,我很清楚。