Ввод таблиц из файла

Я новичок в C ++. Я хочу сделать базу данных, в настоящее время я работаю над одной из ее первых функций. Я хочу, чтобы база данных принимала пользовательский ввод и извлекала его в файл (который работает нормально), а затем я хочу, чтобы отображались числа, которые были сохранены. Как извлечь данные? Я знаю, что в настоящее время то, что я сделал в функции displayAll, не имеет смысла, но я попробовал некоторые другие способы, но не смог найти работающее решение. Как мне прикрепить каждый вход к определенному индексу таблицы? Способ ввода данных сейчас делает это для меня?

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

Ниже приведен код ответственности

struct numbertype {
int  value;
};
numbertype numbers[1000];void AddNumber(){
cout << "Input number" << endl;
cin >> numbers[1000].value;
ofstream numbersout;
numbersout.open("D:\\numbers.txt", ios::app);
numbersout << numbers[1000].value<<"\n";
numbersout.close();
}

void DisplayAllNumbers(){
ifstream numbersout("numbers.txt");
cout << "\t\tTable: numbers";
cout << "value" << endl;;
while (numbersout >> numbers[1000].value){
cout << numbers[1000].value<<endl;
}
numbersout.close();
}

0

Решение

Как указано в комментариях, numbers[1000] является недействительным. Массивы в C ++ начинаются с нуля, поэтому последний элемент в массиве из 1000 элементов имеет индекс 999.

Похоже, вы пытаетесь использовать этот индекс, чтобы поместить значение в конец массива. Это не работает так. Вы должны хранить размер в отдельном целом числе и поддерживать его. Вам также необходимо выполнить проверку границ, чтобы убедиться, что вы не переполняете массив.

Возможно, вам будет проще в использовании std::vector вместо массива. Векторы поддерживают динамический рост, а также встроенный размер. Они хранятся и доступны аналогично массивам.

#include <vector>

std::vector<numbertype> numbers;

void AddNumber()
{
numbertype n;
cout << "Input number" << endl;
if (cin >> n.value) {
numbers.push_back(n);
ofstream numbersout("D:\\numbers.txt", ios::app);
if( numbersout.good() ) numbersout << n.value << "\n";
}
}

void ReadAllNumbers()
{
numbertype n;
ifstream numbersin("numbers.txt");
if (numbersin.good()) {
numbers.clear();
while (numbersin >> n.value) {
numbers.push_back(n);
}
}
}

void DisplayAllNumbers()
{
cout << "\t\tTable: numbers";
cout << "Wartosc" << endl;;
for (size_t i = 0; i < numbers.size(); i++) {
cout << numbers[i].value << endl;
}
}
0

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

Я пошел спать, сейчас я попытался реализовать ваше решение, но, к сожалению, я не смог заставить его работать. Теперь, когда я пытаюсь отобразить числа, программа начинает отображать бесконечный цикл первых двух символов в функции 🙁 Вот как теперь выглядит функция —

void Addnum(){
int siz = 0;
cout << "Type in the number" << endl;
cin >> number[siz].value;
ofstream numbersout;
numbersout.open("D:\\numbers.txt", ios::app);
numbersout << number[siz].value<<"\n";
numbersout.close();
siz++;

}void Displaynum(){
int siz = 0;
cout << "\t\tTable: Numbers" << endl;;
cout << "Value" << endl;

ifstream numbersout("D:\\numbers.txt");

for (int i = 0; i < rozm; i++){
numbersout >> numbersout[i].value;}
numbersout.close();
}
0

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