В книге есть пример кода демонстрирующий файловый ввод, но к сожалению то что описано в коде, не соответствует результату описанному в той же книге.
В общем есть вот такой код:
code#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <cstdlib>
const int size = 60;
int main()
{
char filename[size];
std::ifstream in;
std::cout << "Enter name of data file: ";
std::cin.getline(filename, size);
in.open(filename);
if (!in.is_open())
{
std::cout << "Could not open the file " << filename << std::endl;
std::cout << "Program terminating.\n";
exit(EXIT_FAILURE);
}
double value;
double sum = 0.0;
int count = 0;
in >> value;
count++;
sum += value;
std::cout << "value: " << value << ", sum: " << sum << std::endl;
while (in.good())
{
in >> value;
count++;
sum += value;
std::cout << "value: " << value << ", sum: " << sum << std::endl;
}
if (in.eof())
std::cout << "End of file reached.\n";
else if (in.fail())
std::cout << "Input terminated by data mismatch.\n";
else
std::cout << "Input terminated for unknown reason.\n";
if (count == 0)
std::cout << "No data processed.\n";
else
{
std::cout << "Items read: " << count << std::endl;
std::cout << "Sum: " << sum << std::endl;
std::cout << "Average: " << sum / count << std::endl;
}
in.close();
system("PAUSE");
return 0;
}
Изначально пример кода содержал вот такой вот кусок кода:
in >> value;
while (in.good())
{
++count;
sum += value;
in >> value;
}
Но как бы он не соответствовал логическому результату. В итоге получалось что последний элемент не учитывался.
В общем как правильно организовывать файловый ввод, что бы все по красоте было и чтобы учитывались все данные, а не как я нагородил один и тот же код дважды чтобы тупо подогнать под результат...?
code2in >> value;
count++;
sum += value;
std::cout << "value: " << value << ", sum: " << sum << std::endl;
while (in.good())
{
in >> value;
count++;
sum += value;
std::cout << "value: " << value << ", sum: " << sum << std::endl;
}
Правильно:Не правильно: