目录
一、使用多文件写c语言程序
我使用了三个文件,分别是main.c、login.c、login.h,三个文件都放在sys目录下。
1.1、main.c文件的基础编写
首先,将c语言程序的基本格式写入main.c文件中,代码如下:
#include <stdio.h>
int main(int argc, char const *argv[])
{
return 0;
}
又因为main.c文件需要调用login.h文件,修改代码如下:
#include "login.h"
int main(int argc, char const *argv[])
{
return 0;
}
1.2、head.h文件的基础编写
为了防止重复编译,在.h文件中有一套固定代码写法,如下:
#ifndef __LOGIN_H__ // 判断是否遇到了 #define __HEAD_H__
#define __LOGIN_H__
#endif
login.h的其他内容都写在 #define __HEAD_H__ 与 #endif 之间,其他内容包括预处理语句、函数声明等,示例代码如下:
#ifndef __LOGIN_H__ // 判断是否遇到了 #define __HEAD_H__
#define __LOGIN_H__
#include <stdio.h> // 预处理语句
#include <string.h>
int login(); // 函数声明
#endif
预处理语句:调用系统库。
函数声明:编写函数必须得先进行声明,然后才能进行定义。
1.3、login.c文件的基础编写
首先,因为login.c文件是.c文件,其会被用来编写c语言程序,所以想让它正常编译运行,得需要一些系统库,又因为login.h文件中使用预处理语句调用了系统库,所以在login.c文件中调用login.h即可,示例代码如下:
#include "login.h"
在login.c文件后面写的是相关函数的定义,目的是为了实现程序的功能。示例代码如下:
int sum()
{
int num1 = 0;
int num2 = 0;
int result = 0;
printf("请输入num1的值:");
scanf("%d", &num1);
getchar();
printf("请输入num2的值:");
scanf("%d", &num2);
getchar();
result = num1 + num2;
return result;
}
二、实现简易学生登录系统
2.1、系统简单页面的编写
代码如下:
#include "login.h"
int main(int argc, char const *argv[])
{
int flg = 0;
printf("欢迎来到 学生登录系统!!!\n");
printf("请输入你想要的功能:\n");
printf(" 1 -> 加法计算器\n 2 -> 99乘法表\n 3 -> 期待着(还在开发中)\n");
scanf("%d", &flg);
getchar();
switch(flg)
{
case 1:
printf("result = %d\n", sum());
break;
case 2:
mul_99();
break;
default:
printf("说了期待着,别催了\n");
}
return 0;
}
效果如下:
2.2、功能函数的定义和调用
首先,我明确了此程序需要一些什么功能,然后根据这些功能去分别定义函数来实现这些功能。
既然是学生登录系统,登录函数是不必可少的,然后系统能实现的小功能,包括加法计算器,打印99乘法表,都得为其设计一个函数。
2.2.1、函数声明
要进行函数定义,首先得在login.h文件中进行login函数声明,在函数声明过程中,我也确定好了每个函数的返回值类型,函数名,形式参数等。
login.h代码:
// 防止重复编译
#ifndef __LOGIN_H__ // 判断是否遇到了 #define __HEAD_H__
#define __LOGIN_H__
// 标准头文件
#include <stdio.h>
#include <string.h>
// login登录函数声明
int login();
// sum加法计算器函数声明
int sum();
// 打印99乘法表函数声明
void mul_99();
#endif
2.2.2、函数定义
首先,得知道函数定义会写在login.c文件中。然后根据每个函数的功能去编写相应c语言代码。
login.c代码:
#include "login.h"
//数据的定义
char name[10][25] = {
"韩信" ,
"李广" ,
"张飞" ,
"刘备" ,
"关羽" ,
"赵云" ,
"诸葛亮" ,
"猪猪侠" ,
"蜘蛛侠" ,
"鲁迅" ,
};
int id[10] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,10 };
/*
头文件:head.h
函数原型:int login();
函数参数:无
函数功能:登录函数,判断用户的姓名和id是否正确
函数返回值:密码验证正确返回1,密码验证错误返回0,账号验证错误返回0
*/
int login()
{
char in_name[25] = {};
int in_id = 0;
int num1 = 5;
int num2 = 5;
int result = 0;
do
{
printf("请输入学生姓名:");
scanf("%s" , in_name);
getchar(); //清空缓冲区
for(int i = 0; i < 10; i++)
{
if(!strcmp(in_name , name[i]))
{
printf("姓名正确,有这个学生\n");
while(num1)
{
printf("请输入学生id:");
scanf("%d" , &in_id);
getchar(); //清空缓冲区
if(in_id == id[i])
{
result = 1;
printf("学生id正确\n");
break; //跳出循环
}
else
{
num1--;
printf("学生id错误,请重新输入,你还有%d次机会\n", num1);
if(num1 == 0)
{
result = 2;
}
}
}
break;
}
}
if(result == 1)
{
printf("登录成功\n");
return 1; //跳出循环
}
else if(result == 0)
{
num2--;
printf("学生姓名错误,请重新输入,你还有%d次机会\n", num2);
if(num2 == 0)
{
printf("学生姓名错误五次,登录失败\n");
return 0;
}
}
else
{
printf("学生id错误五次,登录失败\n");
return 0;
}
} while(num1 && num2);
}
/*
头文件:head.h
函数原型:int sum();
函数参数:无
函数功能:让用户输入 num1 和 num2 的值,进行相加
函数返回值:num1 和 num2 的和
*/
int sum()
{
int num1 = 0;
int num2 = 0;
int result = 0;
printf("请输入num1的值:");
scanf("%d", &num1);
getchar();
printf("请输入num2的值:");
scanf("%d", &num2);
getchar();
result = num1 + num2;
return result;
}
/*
头文件:head.h
函数原型:void mul_99();
函数参数:无
函数功能:打印99乘法表
函数返回值:无
*/
void mul_99()
{
// 9 * 9 表
for (int i = 1; i < 10; i++) // 行
{
for (int j = 1; j <= i; j++) // 列
{
printf("%d * %d = %d\t" , j , i , i * j);
}
printf("\n");
}
}
2.2.3、函数调用
函数的定义已经完成,我们需要在main.c文件中主函数里面调用这些功能函数,才能正常使用它们的功能。
main.c代码:
#include "login.h"
int main(int argc, char const *argv[])
{
int flg = 0;
// login登陆函数的调用
if(login() == 0)
{
printf("登陆失败");
return 0;
}
printf("欢迎来到 学生登录系统!!!\n");
printf("请输入你想要的功能:\n");
printf(" 1 -> 加法计算器\n 2 -> 99乘法表\n 3 -> 期待着(还在开发中)\n");
scanf("%d", &flg);
getchar();
switch(flg)
{
case 1:
printf("result = %d\n", sum()); // sum加法计算器函数的调用
break;
case 2:
mul_99(); // 打印99乘法函数的调用
break;
default:
printf("说了期待着,别催了\n");
}
return 0;
}