не корректный вывод данных с++
Возникла проблема с выводом данных в файле. Пожалуйста, напишите доступно и понятно, чтобы получилось исправить. Вот код:
#include <iostream>
#include <cmath>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream fout;
ifstream fin;
fout.open("lenghts.txt");
if (!fout.is_open())
{
cout << "Could not open file lengts.txt"<< endl;
}
else
{
cout << "File lengts.txt was opened and ready to work" << endl;
for (int i = 1; i <= 15; i++)
{ // условие для того чтобы не переводило строку в конце файла
if (i == 15)
{
cout << "Enter first length of the rectangle N" << i << endl;
int a;
cin >> a;
fout << a;
fout << "\n";
cout << "The second length of the rectangle N" << i << endl;
int b;
cin >> b;
fout << b;
}
else
{
cout << "Enter first length of the rectangle N" << i << endl;
int a;
cin >> a;
fout << a;
fout << "\n";
cout << "The second length of the rectangle N" << i << endl;
int b;
cin >> b;
fout << b;
fout << "\n";
}
}
}
fout.close();
fout.open("information.txt");
fin.open("lenghts.txt");
int array[30]; // создаем массив под 30 элементов
while (!fin.eof()) // заполняем массив с помощью цикла
{
int i = 0;
fin >> array[i];
i++;
}
fout << "Lenghts\t" << "Perimetr\t" << "Square" << endl;
for (int i = 0; i < 30; i+= 2) // с помощью цикла находим похожие элементы
{
if (array[i] == array[i + 1])
{
fout << array[i] << "\t" << 4 * array[i] << "\t" << pow(array[i], 2) << endl; // производим действия над найденными элементами
}
}
fout.close();
fin.close();
return 0;
}
Ответы (1 шт):
Автор решения: Alexey Vesker
→ Ссылка
Проблема кроется в цикле:
while (!fin.eof()) // заполняем массив с помощью цикла
{
int i = 0;
fin >> array[i];
i++;
}
Вы при каждом проходе цикла создаете переменную i заново и инициализируете ее нулем. Поэтому каждое следующее число считывается всегда в нулевой элемент массива, а в остальных содержится мусор, который потом попадает в файл.
Для решения проблемы Вынесете объявление и инициализацию i перед циклом.
