1.(未使用原书例题)练习多文件组织。在一个头文件中定义一种学生的结构体,存储姓名和年龄,声明三个函数分别用于询问有多少个学生,输入学生的信息和展示学生的信息。在另一个源文件中给出所有函数的定义。在主程序中使用new初始化结构指针,调用三个函数。

//main.cpp
#include<iostream>
#include"Extra.h"
using namespace std; int main()
{
set_student(); student * students_pt = new student[student_num]; input_student(students_pt); show_student(students_pt); delete []students_pt;
system("pause");
}
//Extra.h
#ifndef _EXTRA_H_
#define _EXTRA_H_ #include<iostream>
const int len = 30; struct student
{
char name[len];
int age;
}; extern int student_num; void set_student();
void input_student(student sdu[]);
void show_student(student sdu[]); #endif // !_EXTRA_H_
//DefineExtra.cpp
#include<iostream>
#include"Extra.h"
using namespace std; int student_num = 1; void set_student()
{
cout << "How many students: ";
if (!(cin >> student_num))
cout << "Bad input.";
else {};
cin.get(); //消除换行符,以便cin.get输入
} void input_student(student sdu_i[])
{
for (int i = 0; i < student_num; i++)
{
cout << "Enter student" << i + 1 << "'s name:\n";
cin.get(sdu_i[i].name, len);
cout << "Enter student" << i + 1 << "'s age:\n";
if(cin >> sdu_i[i].age)
cout << "Bad input.";
else {};
cin.get();
}
} void show_student(student sdu_o[])
{
for (int i = 0; i < student_num; i++)
{
cout << "Student " << i + 1 << " | " << sdu_o[i].name << ", age " << sdu_o[i].age;
cout << "\n";
}
}

2.(未使用原书例题,对应第四题)修改上题的程序,使用重载函数编写函数的其它版本,并使用命名空间包括和拓展。主程序的运行过程见注释。

//main.cpp
#include<iostream>
#include"Extra.h"
using namespace std;
using namespace STU; int main()
{
//先询问有几个学生,然后使用new动态创建相应数量的结构体
set_student();
student * students_pt = new student[student_num]; //输入学生的信息并展示
input_student(students_pt);
show_student(students_pt); //再定义一个student结构体,存储交换生的信息并展示
student stu_transfer;
char st[] = "Joseph";
input_student(stu_transfer, st, 18);
show_student(stu_transfer); delete []students_pt;
system("pause");
}
//Extra.h
#ifndef _EXTRA_H_
#define _EXTRA_H_ #include<iostream>
#include<cstring> namespace STU
{
const int len = 30; struct student
{
char name[len];
int age;
}; extern int student_num; void set_student();
void input_student(student stu_i_ar[]); //输入学生信息,交互式版本
void input_student(student & stu_i, char str[], int age); //输入学生信息,非交互式版本
void show_student(const student stu_o_ar[]); //展示结构体数组信息的版本
void show_student(const student & stu_o); //展示单个结构体信息的版本
}
#endif // !_EXTRA_H_
//DefineExtra.cpp
#include<iostream>
#include"Extra.h"
using namespace std; int STU::student_num = 1; void STU::set_student()
{
cout << "How many students: ";
if (!(cin >> STU::student_num))
cout << "Bad input.";
else {};
cin.get(); //消除换行符,以便cin.get输入
} void STU::input_student(student stu_i_ar[])
{
for (int i = 0; i < STU::student_num; i++)
{
cout << "Enter student" << i + 1 << "'s name:\n";
cin.get(stu_i_ar[i].name, STU::len);
cout << "Enter student" << i + 1 << "'s age:\n";
if(!(cin >> stu_i_ar[i].age))
cout << "Bad input.";
else {};
cin.get();
}
} void STU::input_student(student & stu_i, char str[], int age)
{
strcpy_s(stu_i.name, str); //编译器提示使用
stu_i.age = age;
} void STU::show_student(const student stu_o_ar[])
{
for (int i = 0; i < STU::student_num; i++)
{
cout << "Student " << i + 1 << " | " << stu_o_ar[i].name << ", age " << stu_o_ar[i].age;
cout << "\n";
}
} void STU::show_student(const student & stu_o)
{
cout << "Trasfer student | " << stu_o.name << ", age " << stu_o.age;
}

程序运行结果:

*编译过程中报了好多个编译器运行之前检查不出来的错,总结如下:

1.使用string要注意,它是包含在标准命名空间内的,所以要么using namespace std,要么std::string。

2.注意检查不同文件里声明的函数和其定义,使用的参数类型是不是一致的。

3.strcpy()和strcpy_s()函数的使用注意事项:

https://blog.csdn.net/leowinbow/article/details/82380252

最新文章

  1. 从myeclipse导入eclipse,不能识别为web项目(java项目转为web项目)
  2. 【XLL 框架库函数】 TempActiveColumn/TempActiveColumn12
  3. 转载:手机网页制作的认识(有关meta标签)
  4. 期望dp BZOJ3450+BZOJ4318
  5. 从oracle数据表中读取表结构
  6. Kanzi Studio中的概念
  7. &lt; 独立项目 - 文本挖掘 &gt; - 2016/10/25 第一更 - &lt;Linux相关知识准备&gt;
  8. javascript中的闭包,超简单论述,保证小学生必懂
  9. PE格式的理解(待补充)
  10. smarty 时间格式化date_format
  11. hdu 5025 Saving Tang Monk 状态压缩dp+广搜
  12. 在 VS14 上安装 Visual F# Power Tools
  13. iptables 配置需要保存
  14. 如何成为uber司机,uber司机详细注册流程
  15. 使用adb签名并安装Android程序
  16. 服务部署到Swarm Cluster中
  17. Asible第三章:roles--小白博客
  18. 数字的可视化:python画图之散点图sactter函数详解
  19. IE6 PNG不透明问题 (只解决img标签的图片)
  20. On Line Tools

热门文章

  1. Python爬取网易云音乐歌手歌曲和歌单
  2. Google Analytics谷歌分析事件之非互动事件
  3. Zabbix Server宕机报&ldquo;__zbx_mem_malloc(): out of memory (requested 96 bytes)&rdquo;
  4. Codeforces Round #669 (Div. 2)/Codeforces1407 ABCD
  5. 使用grep命令查找文件中符合”.stg.“行
  6. 详细教程丨使用Prometheus和Thanos进行高可用K8S监控
  7. pytest测试框架 -- setup和teardown等
  8. python3 for
  9. 第11课 - enum, sizeof, typedef 分析
  10. docker部署安装zabbix