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

Can't correctly get content from a file

本文关键字:文件 获取      更新时间:2023-10-16
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;
}

这是输入文件(数据.txt(:

1000 Q Q 1
1001 W W 2
1002 e e 3
1003 R R 4
1004吨 5

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

https://i.stack.imgur.com/IjhCc.png

谁能看出它有什么问题?
它应该是 1000 作为记录,q 代表 fname,q 代表 lname,1 代表音素(对于第一行(。 我所做的只是将每一行存储在结构实例(数据(中,然后将其存储到一个向量中以供以后使用。

如果您想逐字逐句地从文件中读取,请继续使用 >> .如果你想逐行阅读,请使用 std::getline ,但不要以这种方式混合这两者。

另请注意,您有:
  1. 宣布char recordstring[4]
  2. 尝试使用std::cin >> recordstring初始化它
  3. 尝试使用atoi将其转换为int

。而用于填充 int 类型的变量的简单>>就可以了。请注意,recordstring 的大小为 4,足以容纳 3 个字符 + 以 null 结尾的''

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

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

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

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

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

您的逻辑似乎跳过了空格recordstring