打开文件时找不到数组的结尾

时间:2014-05-28 18:04:27

标签: c++ arrays file

所以我想打开一个文件并显示内容。事实是,我不知道使用了多少元素以及有多少元素是空的。因此,当我尝试显示元素时,前几个元素会显示,但其余元素都是随机数字。如何查找并显示元素的确切数量?

文件:

10011   Ali         Doha        12355555    11-5-14     3434    7890 
10015   Ahmed       Al-Khor     51244444    13-6-14     3425    4455 
10014   Mohammed    Al-Wakra    53344333    17-7-14     5566    1234 
10012   Omar        Doha        56666666    10-8-14     1234    5678 
10013   Youssef     Al-Khor     7555512     5-5-14      88000   4532 
10019   Hamad       Al-Wakra    81234567    8-6-14      3125    1265     
10018   Jassim      Doha        86753541    9-7-14      9875    5566

代码:

#include<iostream>
#include<fstream>
#include<string>

using namespace std;


int main()
{
    const int isize=10;
    ifstream datafile;
    datafile.open("D:\customers.txt");
    int customer_number[isize];
    string customer_name[isize]; 
    string customer_address[isize]; 
    long contact[isize]; 
    string Due_date[isize]; 
    int water_consumption[isize]; 
    int electricity_consumption[isize];
    double total_bill[isize];
    if (!datafile)//to know if the file is exist or not
         cout << "error" << endl;
    else
    {
        for(int i=0; i<1000; i++)
        {
            datafile >> customer_number[i];
            datafile>> customer_name[i];
            datafile>> customer_address[i];
            datafile>> contact[i];
            datafile>> Due_date[i];
            datafile>> water_consumption[i];
            datafile>> electricity_consumption[i];}
    }

        for(int i=0; i<isize; i++)
        {
              if(customer_number[i] == '\0')
                      break;
          else
                  cout << customer_number[i] << "\t" << customer_name[i] << "\t" << customer_address[i] << "\t" << contact[i] << "\t"
                      << Due_date[i] << "\t" << water_consumption[i] << "\t" << electricity_consumption[i] << "\t" <<  endl;

   }
      datafile.close();
     return 0;
 }

1 个答案:

答案 0 :(得分:1)

看起来每个文本行都是记录,因此使用std::getlinestd::string来读取记录。

当记录数量未知时,您需要一个动态容器,例如std::vectorstd::liststd::map,而不是固定大小的数组。

您需要研究std::string方法以及std::istringstream 解析文本行到本机格式字段。 StackOverflow上有很多关于如何执行此操作的示例。

因此,请停止使用固定大小的数组,而是使用std::vector