C语言 - 头文件使用案例
源代码分门别类管理,通过头文件。
放置一些函数声明,变量声明,常量定义,宏定义。

hotel.h
#ifndef HOTEL_H_INCLUDED
#define HOTEL_H_INCLUDED
#define HOTEL1 872.0 // 各家酒店的默认房费
#define HOTEL2 1838.0 // 各家酒店的默认房费
#define HOTEL3 789.0 // 各家酒店的默认房费
#define HOTEL4 1658.0 // 各家酒店的默认房费
#define DISCOUNT 0.95 // 折扣率
// 菜单函数:显示菜单选项,接收并返回用户的输入
int Menu(void);
// 返回用户预订的天数
int GetNights(void);
// 根据入住的天数显示最终需要支付的金额
double ShowPrice(int choice,int nights);
#endif // HOTEL_H_INCLUDED
hotel.c
#include <stdio.h>
// 自定义的头文件用双引号
#include "hotel.h"
char hotelNames[4][50] = {
"贝罗酒店","香榭丽舍酒店","阿斯图里亚斯酒店","斯克里布酒店"
};
int Menu(void) {
int choice; // 用户的选择
int i;
printf("请选择入住的酒店:\n");
for (i = 0; i< 4;i++) {
printf("%d、%s\n",i+1,hotelNames[i]); // 写完就去main中测试一下
}
printf("5、退出程序\n");
printf("请输入您的选择:");
int result = scanf("%d",&choice);
// 判断是否合法
while ( result !=1 || choice < 1 || choice >5 ) {
if (result != 1) {
scanf("%*s"); // 消除错误的输入
// fflush(stdin);
}
printf("必须输入1-5之间的整数:");
result = scanf("%d",&choice);
}
return choice;
}
int GetNights(void) {
int nights;
printf("先生、女士,请输入要入住的天数:");
int result = scanf("%d",&nights);
// 判断是否合法
while ( result !=1 || nights < 1) {
if (result != 1) {
scanf("%*s"); // 消除错误的输入
// fflush(stdin);
}
printf("必须输入大于1的整数!\n");
printf("先生、女士,请输入要入住的天数:");
result = scanf("%d",&nights);
}
return nights;
}
double ShowPrice(int choice,int nights) {
double hotelPrice;
double totalPrice = 0;
if (choice == 1) {
hotelPrice = HOTEL1;
}
if (choice == 2) {
hotelPrice = HOTEL2;
}
if (choice == 3) {
hotelPrice = HOTEL3;
}
if (choice == 4) {
hotelPrice = HOTEL4;
}
int i;
for (i = 0 ;i<nights ;i ++ ) {
if (i == 0) {
totalPrice = hotelPrice * DISCOUNT;
} else {
totalPrice += hotelPrice * DISCOUNT;
}
hotelPrice = hotelPrice * DISCOUNT;
}
return totalPrice;
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include "hotel.h" // 最好引入一下头文件
extern char hotelNames[4][50]; // 声明为外部变量
int main()
{
int choice;
int nights;
double totalPrice;
// 用户输入入住的酒店和天数,程序计算出对应的金额
// 1.显示菜单 - 封装成函数
choice = Menu();
if (choice > 0 && choice <5) {
printf("当前用户选择的是:%s\n",hotelNames[choice-1]); // 多遇到一些错误,在错误中成长。将顺序思维,改为模块思维。
}
if (choice == 5) {
printf("欢迎使用本系统,再见。\n");
exit(0);
}
nights = GetNights();
if (nights > 0) {
printf("当前用户选择入住%d天\n",nights); // 多遇到一些错误,在错误中成长。将顺序思维,改为模块思维。
}
// 2.计算过程
totalPrice = ShowPrice(choice,nights);
printf("您入住的酒店是:%s \t 入住天数: %d \t 总费用: %0.2f \n",hotelNames[choice-1],nights,totalPrice);
printf("欢迎使用本系统,再见。\n");
return 0;
}

头文件有约束作用。可以重复使用。
C语言 - 头文件使用案例的更多相关文章
- c语言头文件中定义全局变量的问题
c语言头文件中定义全局变量的问题 (转http://www.cnblogs.com/Sorean/) 先说一下,全局变量只能定义在 函数里面,任意函数,其他函数在使用的时候用extern声明.千万不要 ...
- 嵌入式C语言头文件的建立与使用
如何正确编写 C 语言头文件和与之相关联的 c 源程序文件,这首先就要了解它们的各自功能. 要理解 C 文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程. 一般说来编译器会做以下几 ...
- 51单片机C语言学习笔记6:51单片机C语言头文件及其使用
很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...
- C语言头文件
最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题.学习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的思考过.概念上还是比 ...
- C++标准库头文件名字和C语言头文件名字的区别
1.C++版本的C标准库头文件,一般是cname,而C语言头文件一般是name.h 2.命名为cname的头文件中定义的名字都是从std中来的,而如果是name.h则不是这样的. 3.与是用name. ...
- C语言头文件的使用(转载)
C语言头文件的使用 ——by janders 转载请注名作者和出处,谢谢! C语言中的.h文件和我认识由来已久,其使用方法虽不十分复杂,但我却是经过了几个月的“不懂”时期,几年的“一知半解”时期才逐渐 ...
- C语言头文件、库文件的查找路径
在 程序设计中,文件包含是很有用的.一个大的程序可以分为多个模块,由多个程序员分别编程.有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用.这样,可避免在每个 ...
- 用CBrother将excel中的数据转换为C语言头文件
用CBrother将excel中的数据转换为C语言头文件 最近在工作中,产品这边总是要调整一些参数,而我们在这一块要求所有的配置必须用宏定义来做,因为不同型号直接硬编码写死在代码里,但是一但数量大了, ...
- C语言头文件怎么写?(转载)
---恢复内容开始--- c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码,还在 ...
随机推荐
- Spring Cloud (3) 服务消费者-Ribbon
在上一篇中使用LoadBalancerClient接口实现了获取某个服务的具体实例,并根据实例信息发起服务接口消费请求.但是这样的做法需要我们手工的区编写服务选取.连接拼接等繁琐的工作,对于开发人员来 ...
- 关于Membership和身份认证的记录
在今天写好的code中测试环节,当我用webconfig中的测试数据库就是ok的,但是更替为正式的就不行了: 报错的类是MemberShip,那就关系到身份认证的环节了 找了几个链接,记录下 1.身份 ...
- nginx + php 403 原因分析
环境:nginx + php 问题: 配置的网站,访问出现报错:Access Denied (403) 常见解决方法: 1.文件权限问题 可能是文件权限问题,没有读权限. 或者selinux没有关闭. ...
- [tyvj1957 Poetize5] Vani和Cl2捉迷藏 (最小路径可重点覆盖+二分图最大匹配)
传送门 Description 这片树林里有N座房子,M条有向道路,组成了一张有向无环图. 树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔.如果从房子A沿着路走下去能够到达B,那么在 ...
- PHP中把数据库查询结果输出为json格式
<?php header("Content-type:text/html;charset=utf-8");//字符编码设置 $servername = "local ...
- C++string和int的相互转化
本方法主要利用sstream头文件中的方法来进行转换 1.int转成string #include <iostream> #include<string> #include&l ...
- 把 Python 脚本打包成可以直接双击运行的 .exe 文件 【转】
因为最近要用到 Python 脚本,所以自己学习了一下,顺便学习如何把它打包成 .exe 可执行文件,达到双击运行的效果,网上找了资料,保存下来学习用,原文出处:https://baijiahao.b ...
- List集合中把其中一个元素 调整到集合的第一位
要求:现在想把集合中的某个元素,放到该集合的第一个位置,但是其他元素的顺序不需要管. 方法:需要遍历集合,找到这个元素在集合中的位置,然后使用Collections.swap(list,o,i) (O ...
- VS的代码管理工具
参考文章 可以从中知道修改代码段是要打开相关路径下的文档来修改 官方下载地址 百度云盘 如果项目中国有一些代码重复率非常高,可以把这些代码做成snippet代码段,简化成快捷键命令,加速开发
- owin--Authentication
下面的这个从httpcontext取出来的GetOwinContext的Authentication认证有很多关于cookie和session的方法,好像不实用owin也能取出来 private IA ...