Я новичок в 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();
}
Как указано в комментариях, 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;
}
}
Я пошел спать, сейчас я попытался реализовать ваше решение, но, к сожалению, я не смог заставить его работать. Теперь, когда я пытаюсь отобразить числа, программа начинает отображать бесконечный цикл первых двух символов в функции 🙁 Вот как теперь выглядит функция —
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();
}