将ifstream struct array转换为txt文件然后将其作为数组提取出来是可能的吗?

时间:2013-11-29 07:57:38

标签: c++

我有一个像这样的结构数组:

struct STUDENT{
   int id;
   string name;
   char grade;
};

int main(){
   STUDENT mydata[50];
   for(int i = 0; i < 50; i++){
     cin >> mydata[i].id;
     cin >> mydata[i].name;
     cin >> mydata[i].grade;
   }
   return 0;
}

如何将此数组放入txt中以使其不会丢失其格式,然后如何从txt文件中获取它并将其再次放入相同的struct数组变量中?

示例txt文件输出

1 john A
2 marry B
3 rachel C

1 个答案:

答案 0 :(得分:1)

对于文件输出:

for(int i = 0; i < 50; i++){
     file << mydata[i].id << " ";
     file << mydata[i].name << " ";
     file << mydata[i].grade << std::endl;
   }

阅读:

int i = 0;
while( i < 50 && file >> mydata[i].id >> mydata[i].name >> mydata[i].grade )
    i++;

编辑:

关于错误检查,一种简单的方法是您可以检查i的最终值。如果它小于50,则表示未读取完整数据,并且两者之间发生了一些错误。

为了更健壮的方式,您可以查看此链接以进行异常处理。http://www.cplusplus.com/reference/ios/ios/exceptions/

关于for vs while循环,可以使用它们中的任何一个。然而,一段时间循环看起来更自然,更具可读性。在这种情况下。 for选项看起来像:

for ( int i = 0; i < 50 && file >> mydata[i].id >> mydata[i].name >> mydata[i].grade; i++) 
{
}

使用for循环的一个非常微妙但重要的优点是循环变量i对外部程序是不可见的。这很重要,因为在while循环的情况下,它可能会造成干扰。