функция — программа не выводится в файл? Переполнение стека

? Я застрял в том, где мы должны создать программу квадратичных формул, используя заголовки функций и передавать по номерам значений и ссылкам. Кажется, что все правильно с вычислениями, но ничего не выводится в выходной файл, к которому я направляю его. Любой совет, ребята?

#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;}}

0

Решение

Вы не закрыли условие if (! Out) должным образом. Измените это на:

if (!out)
{
out << "Output file cannot be created. Program ends" << endl;
in.close();
return -1;
}

Вы захотите удалить последнюю фигурную скобку в конце основной функции.

0

Другие решения

Форматируя ваш код (я использовал 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;
}
0

По вопросам рекламы [email protected]