Неправильный ввод/считывание чисел

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Negent
Сообщения: 5
Зарегистрирован: 20 июн 2014, 00:21

Доброго времени суток!
Написал программу, которая должна:
1. Считывать имя файла, определённое пользователем, производить запрос чисел от пользователя и запись чисел в этот файл.
2. Из файла производить считывание чисел, и затем, выводить на экран сумму чисел, кол-во членов и среднее значение.
Но! Программа считывает числа и записывает их "нереально большими". Может, проблема с несоответствием типов или особенностями ввода? Поясните пожалуйста, скриншот прилагаю =)

Код: Выделить всё

#include "stdafx.h"
#include <iostream>
#include <fstream>

using namespace std;

void main ()
{
//Инициализация переменных
	int count = 0;
	int sum = 0;
	int value;
	const int size = 15;
	char filename [size];
	int arr[size];
	int i;
//Ввод имени файла
	cout<<"Name of file: ?\b";
	cin.getline (filename, size);
//Инициализация файла и ввод данных
	ofstream InFile;
	InFile.open (filename);
	cout<<"Double or integer digits: "<<endl;
	i = 0;
	cout<<"#"<<i+1<<": ";
	while (cin>>arr[i] && (i<size-1))
	{
		++i;
		cout<<"#"<<i+1<<": ";
		InFile<<int(arr[i]);
		if (cin.fail ()) 
		{
			cout<<"Unknown error!"<<endl;
			break;
		}
	}
	InFile.close ();
//Открытие файла для чтения и вывод данных
	ifstream OutFile;
	OutFile.open (filename);
	i = 1;
	if (!OutFile.is_open ())
	{
		cout<<"Program terminated!\n";
		exit (EXIT_FAILURE);
	}
	while (OutFile.good ())
	{
		OutFile>>value;
		sum += value;
		i++;
	}
	if (OutFile.eof ()) cout<<"End of file!\n";
	else if (OutFile.fail ()) cout<<"Type mismatch!\n";
	else cout<<"Unknown reason!\n";
//Вывод результатов обработки
	if (i == 0) cout<<"No data!\n";
	else cout<<"Sum: "<<sum<<"\nElements: "<<i<<"\nS/E: "<<double(sum/i)<<endl;
	system ("pause");
}
Изображение
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Предположения неверные. Просто ты сначала считываешь число с консоли в элемент массива, затем увеличиваешь i (вот здесь ошибка), затем выводишь в файл получается следующий элемент массива, в котором мусор. Счётчик i нужно увеличивать после вывода числа в файл.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Ещё замечу, что при выводе чисел в файл, нужно вставлять между ними пробелы, иначе при последующем считывавании из файла набор слитно написанных цифр будет воспринят, как одно большое число.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить