无法正确获取文件中的内容

时间:2013-10-09 17:23:03

标签: c++

struct data
{
 int record;
 string fName;
 string lName;
 string phoneNum;
};

string line, lastname, firstname, phone;

vector<data> readContent()
{
 inFile.open("data.txt");
 vector<data> myData;
 char recordstring[4];
 data datas;

 inFile.clear();
 while(inFile >> recordstring)
 {  
    int records;
    records = atoi(recordstring);
    datas.record  = records;
    getline(inFile, firstname, ' ');
    datas.fName = firstname;
    getline(inFile, lastname, ' ');
    datas.lName = lastname;
    getline(inFile, phone, '\n');
    datas.phoneNum = phone;
    myData.push_back(datas);
 }
 inFile.close();
 return myData;
}

这是输入文件(data.txt):

  

1000 q q 1
  1001 w w 2
  1002 e e 3
  1003 r r 4
  1004 t t 5

这是调试器为文件中的第一行显示的内容:

http://i.imgur.com/uRGeuvj.png

有人能看出它有什么问题吗? 它应该是1000是记录,q代表fname,q代表lname,1代表phonenum(代表第一行)。我所做的就是将每一行存储在结构实例(数据)中,然后将其存储到稍后要使用的向量中。

3 个答案:

答案 0 :(得分:3)

inFile >> recordstring不消耗尾随空格,因此第一个getline()调用返回一个空字符串,因为它消耗的第一个字符是空格。

答案 1 :(得分:3)

如果您想逐字逐句地阅读文件,请留在>>。如果您想逐行阅读,请使用std::getline,但不要以这种方式混合使用这两者。

另请注意,您有:
  1. 声明char recordstring[4]
  2. 尝试使用std::cin >> recordstring
  3. 对其进行初始化
  4. 尝试使用int
  5. 将其转换为atoi

    ...虽然简单的>>用于填充int类型的变量。请注意,recordstring的大小为4,大小足以容纳3个字符+空终止'\0'

    实际上整个阅读可能很简单:

    vector<data> myData;
    
    data d;
    while(inFile >> d.record >> d.fName >> d.lName >> d.phoneNum) {  
        myData.push_back(d);
    }
    

答案 2 :(得分:1)

如果文件格式如图所示是固定的,只需执行以下操作: -

while(inFile >> datas.record >> datas.fName >> datas.lName >> datas.phoneNum)
   myData.push_back(datas);

您的逻辑似乎跳过recordstring

的空格