从文件中输入表格

时间:2013-12-02 01:40:24

标签: c++ fileinputstream

我是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();
        }

2 个答案:

答案 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();
}