从文本列表c ++中获取字符串数组

时间:2014-08-18 00:08:49

标签: c++ arrays text-files

我的文字文件就像

123456123456
Jason
uk
012456788
1000
456789456789
david
uk
012456788
1000

我试图从文本文件中获取数据并将其保存到数组中 但是,当我想将文本文件中的数据存储到数组中时,它会不间断地循环。 我该怎么办 ? 循环中出现的问题或从文本文件中获取数据的方法?

代码:

#include <iostream>
#include <fstream>

using namespace std;

typedef struct {
    char acc_no[12];
    char name[30];
    char address[50];
    char phone_no[12];
    double balance;

} ACCOUNT;

//function prototype
void menu();
void read_data(ACCOUNT record[]);

int main() {
    ACCOUNT record[31]; //Define array 'record'  which have maximum size of 30
    read_data(record);  
}
//--------------------------------------------------------------------

void read_data(ACCOUNT record[]) {
    ifstream openfile("list.txt");              //open text file 

    if (!openfile) {
        cout << "Error opening input file\n";
        return 0;
    } else {
        int loop = -1;                  //size of array 
        cout << "--------------Data From File--------------"<<endl;
        while (!openfile.eof())  {
        if (openfile.peek() == '\n') 
            openfile.ignore(256, '\n');
        openfile.getline(record[++loop].acc_no, 12);
        openfile.getline(record[loop].name, 30);
        openfile.getline(record[loop].address, 50);
        openfile.getline(record[loop].phone_no, 12);
        openfile >> record[loop].balance;
        }
        openfile.close();               //close text file

        for (int i = 0; i <= loop + 1; i++) {
            cout << "Account "  << endl;
            cout << "Account No.  : " << record[i].acc_no << endl;
            cout << "Name         : " << record[i].name << endl;
            cout << "Address      : " << record[i].address << endl;
            cout << "Phone Number : " << record[i].phone_no << endl;
            cout << "Balance      : " << record[i].balance << endl;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

更新:

OP没有在他的数据文件中正确引用正确的格式。此答案仅在last iteration

之前有效

不要使用.eof() - 当您想要打开文件并按字符阅读时,这更适用。

更好的方法是使用插入运算符>>,如下所示:

#define ARR_SIZE 31

ACCOUNT temp;
ACCOUNT record[ARR_SIZE];
int i=0;

while(i < ARR_SIZE) {
  openfile >> temp.acc_no >> temp.name >> temp.address >> temp.phone_no >> temp.balance;
  record[i] = temp;
  i++;
}

当然,除了使用std::string而不是数组之外,更好的方法是使用std::vectors来保存输入文件中的值。