如何使用指针从C

时间:2017-04-16 09:56:55

标签: c

我目前正在编写一个分配程序,该程序需要使用一个函数来使用户能够输入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);
}

3 个答案:

答案 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)

您声明了变量tSyR&amp; hP函数中的main,并通过引用get_positive_value()函数传递它们。

因此传递变量的地址。不是变量本身。

get_positive_value()中,您尝试使用scanf()将一些值放入3个变量中,您应该在这些变量中给出变量的地址但是给出地址< / i>相反。 &topSpeed中的get_positive_value()&(&tS)中的main()类似。

由于您已通过引用传递了它们,因此在get_positive_value()中,tS中的地址为yRhPtopSpeed,{{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这些值,但指针更优雅。

希望我帮助你,我很清楚。