Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2017, 15:49   #1
MeFFoS
 
Регистрация: 28.05.2017
Сообщений: 4
По умолчанию C++ vector

Здравствуйте. Делаю курсовую работу, необходимо создать БД. Реализовал методы чтения/записи с файла. Создаю метод добавления в вектор записи, но push_back добавляет 0,а не число из переменной. Т.е. память выделяется, а переменная не копируется. Почему такое может быть?
Код:
#include "Header.h"
int main()
{
	system("chcp 1251 > text");
	SetConsoleTitle(L"Поставки хлеба");
	Prog prog;
	prog.ReadFile();
	prog.Add();
	prog.WriteFile();
	return 0;
}
Код:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <Windows.h>
using namespace std;
struct Date 
{
	int day;
	int month;
	int year;
};
class Prog 
{
	private: 
		vector <Date> date;
		vector <int> numfact;
		vector <int> kolvo;
		vector <string> names;
		int number;
	public:
		void ReadFile();
		void WriteFile();
		void Add();
};
void Prog::ReadFile() 
{
	char temp[30];
	char dd[3], mm[3], yy[5];
	Date temp2;
	ifstream  inFile;
	inFile.open("bd.txt", ios_base::in);
	inFile >> temp;
	number = atoi(temp);
	while (inFile.peek() != EOF)
	{
		inFile >> temp;
		names.push_back(temp);
		inFile >> temp;
		numfact.push_back(atoi(temp));
		inFile >> dd;
		inFile >> mm;
		inFile >> yy;
		temp2.day = atoi(dd);
		temp2.month = atoi(mm);
		temp2.year = atoi(yy);
		date.push_back(temp2);
		inFile >> temp;
		kolvo.push_back(atoi(temp));
	}
	inFile.close();
	for (int i = 0; i < number; i++)
	{
		cout << names[i] << " ";
		cout << numfact[i] << " ";
		temp2 = date[i];
		cout << temp2.day << "/" << temp2.month << "/" << temp2.year << " ";
		cout << kolvo[i] << endl;
	}
}
void Prog::WriteFile()
{
	ofstream outFile;
	Date temp;
	outFile.open("bd.txt");
	outFile << number << "\n";
	for (int i = 0; i < number; i++)
	{
		outFile << names[i] << " ";
		outFile << numfact[i] << " ";
		temp = date[i];
		outFile << temp.day << " " << temp.month << " " << temp.year << " ";
		outFile << kolvo[i] << "\n";
	}
	outFile.close();
}
void Prog::Add() 
{
	string str;
	Date temp;
	int kol, numfact2;
	cout << "Введите название хлеба" << endl;
	cin >> str;
	cout << "Введите номер хлебозавода" << endl;
	cin >> numfact2;
	cout << "Введите день завоза" << endl;
	cin >> temp.day;
	cout << "Введите месяц завоза" << endl;
	cin >> temp.month;
	cout << "Введите год завоза" << endl;
	cin >> temp.year;
	cout << "Введите количество завезенного хлеба" << endl;
	cin >> kol;
	number++;
	names.push_back(str);
	numfact.push_back(numfact2);
	date.push_back(temp);
	kolvo.push_back(kol);
}
В файле ввёл 2
Дарницкий 1 25 25 1996 5
Пшеничный 1 21 21 1996 3
Чтение/запись проходит нормально. При добавлении записывается пустота и нули(для следующей строчки). Если после push_back names[2]=str; ,то работает. Но ведь должно само присваивать.(cout после push_back выводит пустоту для имени и 0 для int.)
MeFFoS вне форума Ответить с цитированием
Старый 28.05.2017, 16:00   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

При добавлении где? И причем тут вектор? Смотрите значения переменных.

Вообще лучше вместо 4 векторов сделайте структуру с этими полями и один вектор.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.05.2017, 16:26   #3
MeFFoS
 
Регистрация: 28.05.2017
Сообщений: 4
По умолчанию

Код:
void Prog::Add() 
{
	string str;
	Date temp;
	int kol, numfact2;
	cout << "Введите название хлеба" << endl;
	cin >> str;
	cout << "Введите номер хлебозавода" << endl;
	cin >> numfact2;
	cout << "Введите день завоза" << endl;
	cin >> temp.day;
	cout << "Введите месяц завоза" << endl;
	cin >> temp.month;
	cout << "Введите год завоза" << endl;
	cin >> temp.year;
	cout << "Введите количество завезенного хлеба" << endl;
	cin >> kol;
	number++;
	names.push_back(str);
	numfact.push_back(numfact2);
	date.push_back(temp);
	kolvo.push_back(kol);
}
здесь. Даже если я сделаю так в методе,всё равно нули:
Код:
number++;
	Date temp;
	temp.day = 21;
	temp.month = 22;
	temp.year = 1998;
	names.push_back("Белый");
	numfact.push_back(2);
	date.push_back(temp);
	kolvo.push_back(3);
MeFFoS вне форума Ответить с цитированием
Старый 28.05.2017, 16:37   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так а нули как и где увидели?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.05.2017, 16:54   #5
MeFFoS
 
Регистрация: 28.05.2017
Сообщений: 4
По умолчанию

cout << numfact[2]; после push. Либо в файле,куда записываю значения вектора. В методе чтения с файла в вектор push работает как надо.а в этом методе почему-то нет.
MeFFoS вне форума Ответить с цитированием
Старый 28.05.2017, 16:59   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так может в нем нет 3 элементов?

И выкиньте number, он уже есть в векторе.
Код:
cout << numfact.size() << endl;
cout << numfact.back() << endl; // или numfact[numfact.size() - 1]
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.05.2017, 17:05   #7
MeFFoS
 
Регистрация: 28.05.2017
Сообщений: 4
По умолчанию

спасибо.разобрался. при чтении создавало лишний пустой вектор.
MeFFoS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java. Vector<Vector<String>>, вывод в текстовый файл. Artsiom Помощь студентам 0 05.12.2016 16:00
vector RAFA91 Общие вопросы C/C++ 25 06.08.2015 12:35
vector c++ Alendorff Помощь студентам 3 14.04.2013 14:52
C++ Boost - vector<path> to vector<string> frommars Общие вопросы C/C++ 0 04.02.2013 21:19
vector NiCola999 Помощь студентам 5 26.02.2010 08:37