C 如何使用指针将输入函数中的2 int,1 float变量输入传递给main函数?

C 如何使用指针将输入函数中的2 int,1 float变量输入传递给main函数?,c,pointers,C,Pointers,我正在制作账单计算器,我需要在输入函数中输入2整数和1真实数字,我需要将这3个数字转换为月份函数,用输入函数提供的3个数字计算账单 ... float input(int*,int*,float*); void months(int, int, int, int, float, float,int,int,float); ... int main() { ... int x1,y1; float z1; ... int *x= &x1; int *y= &

我正在制作账单计算器,我需要在输入函数中输入2整数和1真实数字,我需要将这3个数字转换为月份函数,用输入函数提供的3个数字计算账单

...
float input(int*,int*,float*);
void months(int, int, int, int, float, float,int,int,float);
...
int main()
{
  ...
  int x1,y1;
  float z1;
  ...
  int *x= &x1;
  int *y= &y1;

  float *z= &z1;
}

float input(int*x,int*y,float*z)
{
  ...
  printf("\nInput your usages of voice : ");
  scanf_s("%d", &x);
  printf("Input your usages of text : ");
  scanf_s("%d", &y);
  printf("Input your usages of data : ");
  scanf_s("%f", &z);
  ...
}

void months(...,int*x,int*y,float*z)
{
  ...
}
如果我输入x,y,z150100,2.11
150100,2.11也放在months函数中,但months函数x,y,z是垃圾值。

您已经在input中获得了参数中变量的地址,因此替换

因此,您不需要在main中使用指针变量,您可以替换

如果我能很好地理解函数月,你也可以直接给出x1,y1,z1,而不是它们的地址。注意声明void monthsint,int,int,int,float,float,int,int,float;与定义不匹配,甚至部分无效月…,int*x,int*y,float*z

我还鼓励您检查scanf_s的结果,以确保用户输入有效的输入

如果考虑到我的评论,我更改了您的代码:

#include <stdio.h>

int input(int*,int*,float*);
float months(int, int, float);

int main()
{
  int x1,y1;
  float z1;

  if (input(&x1, &y1, &z1))
    printf("%g\n", months(x1, y1, z1));

  return 0;
}

/* return 0 if an input is erronned */
int input(int*x,int*y,float*z)
{
  printf("\nInput your usages of voice : ");
  if (scanf_s("%d", x) != 1)
    return 0;
  printf("Input your usages of text : ");
  if (scanf_s("%d", y) != 1)
    return 0;
  printf("Input your usages of data : ");
  if (scanf_s("%f", z) != 1)
    return 0;
  return 1;
}

/* return the bill */
float months(int x,int y,float z)
{
  return x + 1.2 * y + z *100; /* just to return a value */
}
scanf_s("%d", x);
...
scanf_s("%d", y);
...
scanf_s("%f", z);
int x1,y1;
float z1;
...
int *x= &x1;
int *y= &y1;
float *z= &z1;
...
float v = input(x,y,z); /* added */
int x1,y1;
float z1;
...
float v = input(&x1,&x2,&z1); /* added */
#include <stdio.h>

int input(int*,int*,float*);
float months(int, int, float);

int main()
{
  int x1,y1;
  float z1;

  if (input(&x1, &y1, &z1))
    printf("%g\n", months(x1, y1, z1));

  return 0;
}

/* return 0 if an input is erronned */
int input(int*x,int*y,float*z)
{
  printf("\nInput your usages of voice : ");
  if (scanf_s("%d", x) != 1)
    return 0;
  printf("Input your usages of text : ");
  if (scanf_s("%d", y) != 1)
    return 0;
  printf("Input your usages of data : ");
  if (scanf_s("%f", z) != 1)
    return 0;
  return 1;
}

/* return the bill */
float months(int x,int y,float z)
{
  return x + 1.2 * y + z *100; /* just to return a value */
}
pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra i.c
pi@raspberrypi:/tmp $ ./a.out 

Input your usages of voice : 150
Input your usages of text : 100
Input your usages of data : 2.11
481