Я пишу квадратный регрессивный решатель уравнения для класса. Я либо получаю, что% f ожидает тип аргумента double, но аргументы 2 и 3 имеют тип float на строках 45 и 51, или я получаю -nan и-inf в качестве ответа, когда я его компилирую. Я не могу найти другого способа заставить его работать. Я не могу использовать удвоение. Только поплавки и ints с подпрограммами.Аргумент ожидает двойной, но мне нужны поплавки?
#include <stdio.h>
#include <math.h>
void solve_linear(int, int);
void solve_quad(int, int, int);
void solve_real(int,int, int);
void solve_complex(int, int, int);
int main (int argc, char *argv[]){
int a, b, c;
if (argc==4) {
sscanf(argv[1], "%d", &a);
sscanf(argv[2], "%d", &b);
sscanf(argv[3], "%d", &c);
if (a=0){
if (b=0){
printf("Error. A and B cannot both be 0\n");
}
else solve_linear(b, c);
}
else solve_quad(a,b,c);
}
else printf("Error. Must enter 3 numbers on command line.\n");
}
void solve_linear(b, c){
float root;
root=(float)-c/b;
printf("%f\n", root);
}
void solve_quad(a, b, c){
if(b*b-4*a*c<0){
solve_complex(a,b,c);
}
else{
solve_real(a, b, c);
}
}
void solve_real(a, b, c){
float x1, x2;
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("%f, %f\n", &x1, &x2);
}
void solve_complex(a, b, c){
float x_real, x_img;
x_real=-b/(2.0*a);
x_img=(sqrt(abs(b*b-4*a*c)))/(2*a);
printf("%f + %fi\n", &x_real, &x_img);
}
'if (a = 0) {' so 'a' всегда равен нулю и делит на a, это бесконечность – Lionishy
'if (a = 0)' всегда будет возвращать true, то, что вы должны делать, это ' if (a == 0) '. Аналогично 'if (b == 0)' – Rishi
Спасибо, что заметили это. Однако у меня все еще возникают проблемы с поплавками. – JadC