避免使用全局变量,因为迟早你的代码会变得很混乱。
只要把所有以正确的顺序,并通过什么必要:
#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;
}
如果你想打电话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;
}
'eqn'在'scanf'-ed之前使用'h'和'j',所以它们仍然具有值'0'。 – aschepler
正如注意:eqn()的参数'q','w','e'将全局定义的变量'q','w'和'e'映射出去。 – alk
是的,但有没有办法使变量全局,所以他们的价值是有效的所有其他功能? – Rossie