我一直在尝试编写一个求解二次方程的程序。一切似乎都很好,但我试图再次运行的函数在我调用它们之后没有启动。我不明白我做错了什么。
#include <stdio.h>
#include <math.h>
int main(){
float a, b, c, delta, x1, x2;
char YN;
void enter(){
printf("Insert the value of 'a':\n");
scanf("%f", &a);
printf("Insert the value of 'b':\n");
scanf("%f", &b);
printf("Insert the value of 'c':\n");
scanf("%f", &c);
delta = (b*b) - (4 * a * c);
x1 = (-b-sqrt(delta))/(2*a);
x2 = (-b+sqrt(delta))/(2*a);
}
void solve(){
if (delta > 0){
printf("The first root of the equation is %f.", x1);
printf("The second root of the equation is %f.", x2);
}
else if (x1 == x2){
printf("The only root of the equation is %f.", x1);
}
else{
printf("The equation has no real roots.");
}
}
void input(){
scanf("%c", &YN);
}
void check(){
if (YN == 'Y'){
solve();
}
else if (YN == 'N'){
enter();
}
else {
input();
}
}
enter();
printf("Your equation must be: %f x^2 + %f x + %f, is it correct? Type Y for yes, N for no.\n", a, b, c);
input();
check();
return 0;
}
因为我认为变量使函数无法工作,所以我尝试在solve函数之外添加变量,但它并不真正起作用。
3条答案
按热度按时间hs1ihplo1#
在标准C语言中,你不能在其他函数中定义函数。相反,你必须在
main()
之外单独声明/定义函数。此外,你可以有全局变量,可以被你所有的函数“全局”访问。它们的作用域不是特定的函数。要做到这一点,在你的主函数之外声明它们。
这里有几个问题:
1.不建议所有变量都是全局变量。学习如何使用函数参数和通过引用传递,而不是引用全局变量。你也可以通过让函数返回值来清理这一点。
1.在我看来,你在这里拥有的函数不需要在它们自己的函数中,它们可以全部包含在你的主函数中。
下面是一个格式正确的代码示例:
r7knjye22#
你在这里有很多问题。
1.嵌套函数。
1.不使用函数的参数和返回值
1.错误的函数逻辑(在你的例子中,只有输入函数才有意义)。一般来说,逻辑很差
1.在取平方根之前,您不检查
delta
。https://godbolt.org/z/jb74M4qWq
q43xntqr3#
你有 * 嵌套 * 函数。
虽然
gcc
[在某种程度上]允许这样做,但它不是标准的。生成的代码很难看/容易出错。更好的方法是将vars设置为全局作用域。或者,重新构造程序,这样就不需要这样做(例如,将更多的项作为参数传递)。
你试图做一个“lambda”函数或“闭包”。
一种方法是让一个
struct
包含所有在main
中 function 作用域的变量,并传递一个指向该变量的指针。下面是一个 backbone 示例:请注意:“天下没有免费的午餐”。在支持lambda函数的语言中(例如C++等),隐藏/生成的代码与上面类似。