我有一个像这样的结构数组:
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
答案 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循环的情况下,它可能会造成干扰。