我是C ++的初学者。我想创建一个数据库,目前我正在研究它的第一个功能。我希望数据库获取用户输入并将其解压缩到文件(工作正常),然后我希望它显示已保存的数字。我如何提取数据?我知道目前我在displayAll函数中所做的事情没有任何意义,但我尝试了其他方法,但找不到有效的解决方案。如何将每个输入附加到表的特定索引?现在我输入数据的方式是为我做的吗?
我意识到我初始化表的当前方式不是最优的,我的目标是保留value属性,最重要的是,我想尽快添加学生的功能,学生ID,姓名和姓氏的格式相同作为数字(结构),我希望它有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 :(得分: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;
}
}
答案 1 :(得分:0)
我去睡觉了,现在我试图实施你的解决方案,但不幸的是我无法使它工作。现在,当我尝试显示数字时,程序开始在函数中显示前两个couts的无限循环:(这就是函数现在的样子 -
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();
}