(提前声明,以下皆为我自己做题时所记录,方便以后查看,当然也希望大家一起来观看并指出我的错误。)
#include<iostream>
using namespace std;
const int c_nSLEN = 30;
struct student{
char fullname[c_nSLEN];
char hobby[c_nSLEN];
int nOoplevel;
};
int fnGetinfo(student sta[], int n);
void fnDisplay1(student st);
void fnDisplay2(const student* pst);
void fnDisplay3(const student* pst,int n);
int main()
{
cout << "Enter class size: ";
int nClassSize;
cin >> nClassSize;
while (cin.get() != '\n')
{
continue;
}
student* ptStu = new student[nClassSize];
int nEntered = fnGetinfo(ptStu, nClassSize);
for (int i = 0; i < nEntered; i++)
{
fnDisplay1(ptStu[i]);
fnDisplay2(&ptStu[i]);
}
fnDisplay3(ptStu, nEntered);
delete[] ptStu;
cout << "Done.\n";
return 0;
}
int fnGetinfo(student sta[], int n)
{
int i;
for (i = 0; i < n; i++)
{
cout << "Please enter your name: ";
cin.get(sta[i].fullname, c_nSLEN).get(); //cin.get遇到空行会设置失效位
if (cin.fail())
{
cin.clear();
while (cin.get() != '\n')
continue;
break;
}
cout << "Please enter your hobby: ";
cin.get(sta[i].hobby, c_nSLEN).get();
if (cin.fail())
{
cin.clear();
while (cin.get() != '\n')
continue;
break;
}
cout << "Please enter your ooplevel: ";
cin >> sta[i].nOoplevel;
while (cin.get() != '\n')
continue;
}
return i;
}
void fnDisplay1(student st)
{
cout << "Your name: " << st.fullname << endl
<< "Your hobby: " << st.hobby << endl
<< "Your ooplevel: " << st.nOoplevel << endl;
}
void fnDisplay2(const student* pst)
{
cout << "Your name: " << pst->fullname << endl
<< "Your hobby: " << pst->hobby << endl
<< "Your ooplevel: " << pst->nOoplevel << endl;
}
void fnDisplay3(const student* pst, int n)
{
for (int i = 0; i < n; i++)
{
cout << "Your name: " << (pst+i)->fullname << endl
<< "Your hobby: " << (pst+i)->hobby << endl
<< "Your ooplevel: " << (pst+i)->nOoplevel << endl;
}
}