C++ 如果将stream struct数组转换为txt文件,然后将其提取为数组,这可能吗?

C++ 如果将stream struct数组转换为txt文件,然后将其提取为数组,这可能吗?,c++,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;

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

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;
}
对于文件输出:

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

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

澄清“将此数组放入txt中,以便它不会丢失其格式”。我在这里看不到任何格式。您可以按照预先确定的格式将此数据输出到文件中,如用空格分隔或任何取消限制字符分隔。然后以同样的方式阅读。你需要序列化它。一种简单的方法是将结构的每个成员写入其自己行上的文件,然后以相同的方式将其读回。你也可以每行做一条记录,但是你需要有一些方法来处理名字中有空格的地方,也许你可以把它放在行尾,假设前两个字段后面的所有内容都是名字。下面是一些代码,展示如何处理格式错误的输入(至少是如何跳过它)也会有帮助。你是说文件中的输入格式不正确?是的,来自文件,或来自cin,或其他任何文件。比如说“input from
std::istream
”。列之间的空格是多少?@edward默认情况下,提取操作符跳过空格。如果你想读一个像约翰·史密斯这样的名字,我建议你使用一个定界字符并使用getline()。
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++;
for ( int i = 0; i < 50 && file >> mydata[i].id >> mydata[i].name >> mydata[i].grade; i++) 
{
}