#include<iostream>
using namespace std;
const int SLEN = 30;
struct student //学生结构体
{
char fullname[SLEN]; //全名
char hobby[SLEN]; //业余爱好
int ooplevel; //成绩水平
};
int getinfo(student pa[], int n)//从终端获取学生信息
{
int i = 0;
for (; i < n; i++)
{
//输入格式或者类型正确
cout << "输入第"<<(i+1)<<"学生全名: ";
cin >> pa[i].fullname;
//输入格式或者类型错误
if (!cin)//流对象返回自己本身(例如cin>>buf,返回值是对象cin本身,流对象可以隐士转换成可以进行判断的对象
{
//输入格式错误的内容,清空输入缓冲区
cin.clear();
break;
}
cout << "输入第" << (i + 1) << "学生业余爱好: ";
cin >> pa[i].hobby;
//输入格式或者类型错误
if (!cin)//流对象返回自己本身(例如cin>>buf,返回值是对象cin本身,流对象可以隐士转换成可以进行判断的对象
{
//输入格式错误的内容,清空输入缓冲区
cin.clear();
break;
}
cout << "输入第" << (i + 1) << "学生分数: ";
cin >> pa[i].ooplevel;
//输入格式或者类型错误
if (!cin)//流对象返回自己本身(例如cin>>buf,返回值是对象cin本身,流对象可以隐士转换成可以进行判断的对象
{
//输入格式错误的内容,清空输入缓冲区
cin.clear();
break;
}
}
return i;
}
void display1(student &st)
{
cout << "学生全名: " <<st.fullname;
cout << "学生业余爱好: " << st.hobby ;
cout << "学生分数: " << st.ooplevel ;
cout << endl;
}
void display2(const student* st)
{
if (st == NULL)return;
cout << "学生全名: " << st->fullname;
cout << "学生业余爱好: " << st->hobby;
cout << "学生分数: " << st->ooplevel ;
cout << endl;
}
void display3(const student pa[], int n)
{
for (int i=0; i < n; i++)
{
cout << "学生全名: " << pa[i].fullname ;
cout << "学生业余爱好: " << pa[i].hobby;
cout << "学生分数: " << pa[i].ooplevel;
cout << endl;
}
}
int main()
{
cout << "enter class size:";//输入学生信息个数s
int class_size;
cin >> class_size;
if (!cin)//流对象返回自己本身(例如cin>>buf,返回值是对象cin本身,流对象可以隐士转换成可以进行判断的对象
{
//输入格式错误的内容,清空输入缓冲区
cin.clear();
return -200;
}
while (cin.get() != '\n')
{
continue;
}
student* ptr_su = new student[class_size];
int entered = getinfo(ptr_su, class_size);
for (int i = 0; i < entered; i++)
{
display1(*(ptr_su+i));
display2(&ptr_su[i]);
}
display3(ptr_su, entered);
delete[]ptr_su;
cout << "done\n";
return 0;
}
|