-
概述
本文章主要介绍的是C语言中的函数,函数在C语言中是非常重要的一环,今天除了介绍函数外,还会用函数的方式实现一个完整的ATM项目。
-
详解
什么是函数?
对于一个 C 程序而言,它所有的命令都包含在函数内,每个函数都会执行特定的任务。
有一个特别的函数,那就是main()函数,main函数是程序启动后,第一个执行的函数。其他所有函数都是 main()函数的子函数(或者与之相关联的过程,例如回调函数),并且它们的函数名称可以自己设定。
每个函数都只能被定义一次,但一个函数可以根据需要被多次的声明和调用。
为什么要使用函数?
为什么要用函数呢?不用函数不行吗?当然可以,函数实现了的功能其实都可以直接在main函数里实现,那为什么还要函数呢?函数是将实现的功能一个个分离开,需要的时候调用就行了;其目的是使main函数更简洁,层次感更鲜明,代码的阅读性,以及降低代码间的耦合性(便于移植)。
函数定义的形式结构一般如下:
-
ATM功能实现
ATM功能:
1.存款
2.取款
3.更改密码
4.查询
5.退出
代码如下:
- 定义全局(静态)变量模拟密码和金额
static long passWord = 123;
static float money = 1000.0;
- 欢迎使用界面
//欢迎使用提示界面
void welcome(void){
printf("*********************\n");
printf("\n");
printf("\n");
printf(" 欢迎使用!");
printf("\n");
printf("\n");
printf("\n");
printf("*********************\n");
}
- 输入密码并验证真假
//验证密码是否正确
bool getPassword(void){
long pwd = 0;
//记录密码错误次数
int wrongtime = 0;
printf("请输入密码:");
while (1) {
scanf("%ld",&pwd);
//判断密码
if (pwd == passWord) {
//密码正确
printf("密码正确\n");
return true;
}else{
//密码错误
wrongtime++;
if (wrongtime >= 3) {
//错误三次 跳出循环
printf("密码错误次数过多,密码已锁定,请联系客服\n");
exit(EXIT_FAILURE);
}else{
printf("密码错误,请重新输入:");
}
}
}
return false;
}
- 显示操作界面
void options(void){
printf("\n*******************\n");
printf("1.存款\n");
printf("2.取款\n");
printf("3.查询\n");
printf("4.更改密码\n");
printf("5.退出\n");
printf("*******************\n");
}
- 选择操作,并判断是否合法
//选择操作
int choose(int maxOption){
printf("请选择操作:");
int ch = 0;
while (1) {
scanf("%d",&ch);
//判断操作是否合法
if (ch > 0 && ch <= maxOption) {
//操作合法
return ch;
}else{
//操作不合法
printf("操作不合法,请从新输入");
}
}
return 0;
}
- 是否继续提示操作
void ifContinue(void){
while (1) {
printf("是否继续?y/n ");
char c;
getchar();
c = getchar();
if (c == 'y') {
//继续
break;
}else{
//退出
Exit();
}
}
}
- 存款
//存款
void putinMoney(void){
printf("请输入存款金额:");
int inMoney = 0;
scanf("%d",&inMoney);
money += inMoney;
printf("存款成功,余额为:%.2f\n",money);
}
- 取款
//取款
void getMoney(void){
while (1) {
printf("请输入取款金额:");
int outMoney = 0;
scanf("%d",&outMoney);
if (outMoney <= money) {
money -= outMoney;
printf("取款成功,余额为:%.2f\n",money);
break;
}else{
printf("余额不足,是否继续?y/n");
char c;
getchar();
c = getchar();
if (c == 'y') {
//继续
}else{
break;
}
}
}
}
- 查询
void consult(void){
printf("您当前的余额为:%.2f\n",money);
}
- 更改密码
//更改密码
void changePassword(void){
while (1) {
printf("请输入密码:");
long pwd = 0;
scanf("%ld",&pwd);
if (pwd == passWord) {
//原密码正确
printf("请输入新密码:");
long newPwd = 0;
scanf("%ld",&newPwd);
printf("请确认新密码:");
long newPwd2 = 0;
scanf("%ld",&newPwd2);
if (newPwd == newPwd2) {
//密码设置成功
printf("密码设置成功\n");
pwd = newPwd;
break;
}else{
printf("密码设置失败,是否继续?y/n");
char c;
getchar();
c = getchar();
if (c == 'y') {
//继续
}else{
break;
}
}
}
}
}
- 退出
//退出
void myExit(void){
printf("感谢您的使用,再见!\n");
exit(EXIT_SUCCESS);
}
- 创建一个新的文件,将方法名在头文件(.h)中声明,在.c文件中将以上方法写入实现
#ifndef ATMMethod_h
#define ATMMethod_h
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
static long passWord = 123;
static float money = 1000.0;
//函数声明
bool getPassword(void); //登陆输入密码
void welcome(void);
int choose(int maxOption); //选择
void options(void); //显示供选择的操作
void ifContinue(void);
void myExit(void); //退出
void changePassword(void);
void getMoney(void); //取款
void putinMoney(void); //存款
void consult(void); //查询
#endif /* ATMMethod_h */
- 最后在main函数中导入上述头文件,调用方法运行
#include <stdio.h>
#include "ATMMethod.h"
int main(int argc, const char * argv[]) {
//欢迎界面
welcome();
//输入密码 判断是否正确
bool result = getPassword();
if (result == true) {
while (1) {
options();
int chioce = choose(5);
switch (chioce) {
case 1:
//存款
putinMoney();
break;
case 2:
getMoney();
//取款
break;
case 3:
//查询
consult();
break;
case 4:
changePassword();
//更改密码
break;
case 5:
//退出
myExit();
break;
default:
break;
}
ifContinue();
}
}
return 0;
}
-
运行结果如下
-
总结感悟
学习一个知识,只有在实际项目中才能更快的熟悉和掌握。
函数虽然表现形式只有那一种,但实现的功能千变万化,在ATM这个demo中可以看出:C语言是面向过程的编程语言,用函数将功能剥离出来,在main函数中一目了然地看出运行过程与功能。