如何在另一个函数中使用scanf中的参数?

时间:2017-04-01 14:05:41

标签: c function user-defined-functions

#include <-stdio.h>
float q, w, e, v1, v2;
int h, j;

int eqn(float q, float w, float e);
float val(int x);

int main (){

    eqn(q,w,e);
    scanf("%d%d",&h,&j);

return 0;
}

int eqn(float q, float w, float e) {
    scanf("%f %f %f", &q, &w, &e);
    printf("Entered equation: %.2fx^2 + %.2fx + %.2f\n", q, w, e);
    v1=val(h);
    v2=val(j);
    printf("values %f %f", value1, value2);
}

float val(int x){
    float value = q*x*x+w*x+e;
    return value;
}

所以,我想从用户那里得到h和j值,并在eqn函数中使用它们来获取值。我也要求用户提供q,w,e值。 如何得到方程的系数和我想要计算的值?

1 个答案:

答案 0 :(得分:0)

在这样做的时候,不要使用全局变量,因为你的代码迟早会变得很乱。

只需按照正确的顺序排列并传递必要的内容:

#include <stdio.h>

int eqn(int h, int j);
float val(float q, float w, float e, int x);

int main(void)
{
  int h, j;

  scanf("%d%d", &h, &j);
  eqn(h, j);

  return 0;
}

int eqn(int h, int j) 
{
  float v1, v2;
  float q, w, e;

  scanf("%f %f %f", &q, &w, &e);

  printf("Entered equation: %.2fx^2 + %.2fx + %.2f\n", q, w, e);

  v1 = val(q, w, e, h);
  v2 = val(q, w, e, j);

  printf("values %f %f\n", v1, v2);
} 

float val(float q, float w, float e, int x)
{
  float value = q*x*x + w*x + e;
  return value;
}

如果要从main呼叫val(),请切换到传递地址以允许呼叫者查看被叫方分配的内容:

#include <stdio.h>

int eqn(float * pq, float * pw, float * pe);
float val(float q, float w, float e, int x);

int main(void)
{
  float q, w, e;
  int h, j;
  float v1, v2;

  eqn(&q, &w, &e);

  scanf("%d%d", &h, &j);

  v1 = val(q, w, e, h);
  v2 = val(q, w, e, j);

  printf("values %f %f\n", v1, v2);

  return 0;
}

int eqn(float * pq, float * pw, float * pe)
{
  scanf("%f %f %f", pq, pw, pe);

  printf("Entered equation: %.2fx^2 + %.2fx + %.2f\n", *pq, *pw, *pe);
} 

float val(float q, float w, float e, int x)
{
  float value = q*x*x + w*x + e;
  return value;
}

要定义变量的范围,请更严格地将main()更改为:

int main(void)
{
  float q, w, e;
  eqn(&q, &w, &e);

  {
    int h, j;
    scanf("%d%d", &h, &j);

    {
      float v1 = val(q, w, e, h);
      float v2 = val(q, w, e, j);

      printf("values %f %f\n", v1, v2);
    }
  }

  return 0;
}