在例13.14的基础上,修改程序,将存放在c数组中的数据读入并显示出来。
方法一:
#include<iostream>
#include<sstream>//这是最新的头文件
#include<cstring>
using namespace std;
struct student
{
int num;
char name[20];
double score;
};
int main()
{
student stud[3]=
{
1001,"Li",78,
1002,"Wang",89.5,
1004,"Fang",90
},stud1[3];
char c[50]={0};
int i;
ostringstream strout;
for(i=0;i<3;i++)
{
strout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<" ";
}
strout<<ends;
strcpy(c,strout.str().c_str());
cout<<"array c:"<<endl<<c<<endl<<endl;
istringstream strin(c);
for(i=0;i<3;i++)
{
strin>>stud1[i].num>>stud1[i].name>>stud1[i].score;
}
cout<<"data from array c to array stud1:"<<endl;
for(i=0;i<3;i++)
{
cout<<stud1[i].num<<" "<<stud1[i].name<<" "<<stud1[i].score<<endl;
}
cout<<endl;
return 0;
}
在VS2019下,需将源文件的strcpy做一些修改:
#include<iostream>
#include<sstream>//这是最新的头文件
#include<cstring>
using namespace std;
struct student
{
int num;
char name[20];
double score;
};
int main()
{
student stud[3] =
{
1001,"Li",78,
1002,"Wang",89.5,
1004,"Fang",90
}, stud1[3];
char c[50] = { 0 };
int i;
ostringstream strout;
for (i = 0; i < 3; i++)
{
strout << stud[i].num << " " << stud[i].name << " " << stud[i].score << " ";
}
strout << ends;
strcpy_s(c, strlen(strout.str().c_str())+1,strout.str().c_str());
cout << "array c:" << endl << c << endl << endl;
istringstream strin(c);
for (i = 0; i < 3; i++)
{
strin >> stud1[i].num >> stud1[i].name >> stud1[i].score;
}
cout << "data from array c to array stud1:" << endl;
for (i = 0; i < 3; i++)
{
cout << stud1[i].num << " " << stud1[i].name << " " << stud1[i].score << endl;
}
cout << endl;
return 0;
}
方法二:只建立一个输入输出串流
#include<iostream>
#include<sstream>//这是最新的头文件
#include<cstring>
using namespace std;
struct student
{
int num;
char name[20];
double score;
};
int main()
{
int i;
student stud[3]=
{
1001,"Li",78,
1002,"Wang",89.5,
1004,"Fang",90
},stud1[3];
char c[50]={0};
stringstream strio(c,ios::in|ios::out);
for(i=0;i<3;i++)
{
strio<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<" ";
}
strio<<ends;
strcpy(c,strio.str().c_str());
cout<<"array c:"<<endl<<c<<endl<<endl;
for(i=0;i<3;i++)
{
strio>>stud1[i].num>>stud1[i].name>>stud1[i].score;
}
cout<<"data from array c to array stud1:"<<endl;
for(i=0;i<3;i++)
{
cout<<stud1[i].num<<" "<<stud1[i].name<<" "<<stud1[i].score<<endl;
}
cout<<endl;
return 0;
}
在VS2019下,需将源文件的strcpy做一些修改:
#include<iostream>
#include<sstream>//这是最新的头文件
#include<cstring>
using namespace std;
struct student
{
int num;
char name[20];
double score;
};
int main()
{
int i;
student stud[3] =
{
1001,"Li",78,
1002,"Wang",89.5,
1004,"Fang",90
}, stud1[3];
char c[50] = { 0 };
stringstream strio(c, ios::in | ios::out);
for (i = 0; i < 3; i++)
{
strio << stud[i].num << " " << stud[i].name << " " << stud[i].score << " ";
}
strio << ends;
strcpy_s(c, strlen(strio.str().c_str())+1,strio.str().c_str());
cout << "array c:" << endl << c << endl << endl;
for (i = 0; i < 3; i++)
{
strio >> stud1[i].num >> stud1[i].name >> stud1[i].score;
}
cout << "data from array c to array stud1:" << endl;
for (i = 0; i < 3; i++)
{
cout << stud1[i].num << " " << stud1[i].name << " " << stud1[i].score << endl;
}
cout << endl;
return 0;
}