? Я застрял в том, где мы должны создать программу квадратичных формул, используя заголовки функций и передавать по номерам значений и ссылкам. Кажется, что все правильно с вычислениями, но ничего не выводится в выходной файл, к которому я направляю его. Любой совет, ребята?
#include<iostream>
#include<fstream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;void GetInputs(ifstream&in, double &a, double &b, double &c);
int Quadroots(double a, double b, double c, double &r1, double &r2);
void Print(ofstream &out, double a, double b, double c, double r1, double r2, int EquationKind);
ifstream in;
ofstream out;void GetInputs(ifstream &in, double &a, double &b, double &c)
{
in >> a >> b >> c;
}
int Quadroots (double a, double b, double c, double& r1, double& r2)
{
double radical;
if (a==0)
{
return -1;
}
radical = b*b-4*a*c;
if (radical < 0)
{
return -2;
}
else
{ r1 = (-b + sqrt(radical))/2*a;
r2 = (-b - sqrt(radical))/2*a;
return 0;
}
}
void Print(ofstream& out, double a, double b, double c, double r1, double r2, int EquationKind)
{
out << "Solving roots for Quadratic equations (ax^2+bx+c)"<< endl;
out << "a "<< "b " << "c " << "Root1 "<< "Root2 "<< "message" << endl;
out << "-----------------------------------------------------------------------------------------------" << endl;
out << a << " "<< b << " "<< c << endl;if (r1 != 10000.0 & r2 != 10000.0)
out << r1 <<" " << r2 << " " << "Two Real roots." << endl;
if (r1!=10000.0 || r2 !=10000.0)
out <<r1 <<" " << "One real roots" << endl;
if (a==0)
out << " " << "It is a line"<< endl;
if (EquationKind== -2)
out << " " << "No real solution" << endl;
}int main()
{
int Quadroot1, Quadroot2, EquationKind;
double a, b, c, r1=10000.0, r2=10000.0;
in.open("input.txt");
if (!in)
{
out << "error opening file";
return -1;
}
out.open("output.txt");
if (!out)
{
out << "Output file cannot be created. Program ends" << endl;
in.close();
return -1;
GetInputs(in, a, b, c);
while(!in.eof())
{
EquationKind = Quadroots(a, b, c, r1, r2);
Print(out, a, b, c, r1, r2, EquationKind);
GetInputs(in, a, b, c);
}
Print(out, a, b, c, r1, r2, EquationKind);
out.close();
return 0;}}
Вы не закрыли условие if (! Out) должным образом. Измените это на:
if (!out)
{
out << "Output file cannot be created. Program ends" << endl;
in.close();
return -1;
}
Вы захотите удалить последнюю фигурную скобку в конце основной функции.
Форматируя ваш код (я использовал clang-format, есть и другие инструменты, но я отвлекся), ваша ошибка стала намного понятнее.
Ваш код:
int main() {
int Quadroot1, Quadroot2, EquationKind;
double a, b, c, r1 = 10000.0, r2 = 10000.0;
in.open("input.txt");
if (!in) {
out << "error opening file";
return -1;
}
out.open("output.txt");
if (!out) {
out << "Output file cannot be created. Program ends" << endl;
in.close();
return -1;
GetInputs(in, a, b, c);
while (!in.eof()) {
EquationKind = Quadroots(a, b, c, r1, r2);
Print(out, a, b, c, r1, r2, EquationKind);
GetInputs(in, a, b, c);
}
Print(out, a, b, c, r1, r2, EquationKind);
out.close();
return 0;
}
}
Конечная причина — (по крайней мере! Я предполагаю, что других ошибок нет!) — неправильная скобка. Исправляя это в main
выходы:
int main() {
int Quadroot1, Quadroot2, EquationKind;
double a, b, c, r1 = 10000.0, r2 = 10000.0;
in.open("input.txt");
if (!in) {
out << "error opening file";
return -1;
}
out.open("output.txt");
if (!out) {
out << "Output file cannot be created. Program ends" << endl;
in.close();
return -1;
}
GetInputs(in, a, b, c);
while (!in.eof()) {
EquationKind = Quadroots(a, b, c, r1, r2);
Print(out, a, b, c, r1, r2, EquationKind);
GetInputs(in, a, b, c);
}
Print(out, a, b, c, r1, r2, EquationKind);
out.close();
return 0;
}