如何使用结构将指针值从单独的函数传递回main

时间:2016-10-14 18:13:15

标签: c arrays pointers structure return-value

#include <stdio.h>
#define G 9.81

//结构带来的使用称为USER_INPUT

typedef struct
{
    double weight;
    double drag;
    double time;

} USER_INPUT;

void getInput(USER_INPUT *); //function prototype - which i think works

void main()

{
    USER_INPUT input;
    getInput(&input);

//这是输入值应显示的位置,但不会返回任何内容

    printf("Weight = ", input.weight);
    printf("Drag = ", input.drag);
    printf("Time =", input.drag);


}

//单独的函数,我从用户那里获得输入。它有效但值不会传回主

void getInput (USER_INPUT *inpPtr)
{
    printf("Please enter the weight:");
    scanf("%lf", &inpPtr->weight);
    fflush(stdin);
    printf("Please enter the drag:");
    scanf("%lf", &inpPtr->drag);
    fflush(stdin);
    printf("Please enter the time:");
    scanf("%lf", &inpPtr->time);
    fflush(stdin);
    return(0); //<- idk if this is right either

}

1 个答案:

答案 0 :(得分:0)

您描述的问题可归因于您将格式说明符从printf()语句中删除。此外,您尝试两次显示.drag

printf("Weight = %g\n", input.weight);
printf("Drag = %g\n", input.drag);
printf("Time = %g\n", input.time);

函数getInput()不会将值传递回main()(它的返回类型为void!),但它会修改存储在字段中的值USER_INPUT结构input存在于main()范围内。

这里还有其他一些问题。 main()函数始终返回int,您应该这样声明:

int main(void){}

或者,如果您使用的是命令行参数,则可以执行以下操作:

int main(int argc, char *argv[]){}

或:

int main(int argc, char **argv){}

刷新输入流是未定义的行为,尽管它适用于某些系统。为了便于携带,最好不要这样做。你可以使用类似的东西:

while (getchar() != '\n')
    continue;

在调用scanf()后丢弃输入流中不需要的字符。

最后,返回类型为void的函数不需要return语句,尽管有些人喜欢使用return ;来显式返回。但是,从这样的函数返回int值肯定是错误的。