查看原文
其他

【C语言笔记】分享一个C语言测试程序模板

正念君 嵌入式大杂烩 2021-01-31

前言


平时需要测试一些比较模糊的知识点,或则想要验证一些函数时,我们常常会建一个test.c文件,然后在这个文件里写我们的测试代码,测试完毕后常常会删掉该文件。下次再遇到同样的问题的时候,可能又是记不清楚了,常常又需要测试一遍,这是件很浪费时间的事情。


所以,我们可以编写一个专门用于测试的程序:(1)有菜单,可以通过菜单选择想要测试的函数;(2)有功能函数,把一些需要测试的功能封装成一个函数;(3)有测试函数,用于测试功能函数及一些知识点。


该测试程序大致如下:


我们只要输入菜单前面的数字就可以进行对应的测试啦。挺方便的,日积月累,渐渐的,就可以积累很多知识点。如:



该测试程序代码模板


1、菜单函数如下:


2、主函数如下:


3、该测试程序函数声明部分如下


完整程序


/*----------------------------------------------------------------------------------------
 
 程序说明:这是一个测试程序
 创建日期:2018.12.14 by LiZhengNian

----------------------------------------------------------------------------------------*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

// 功能函数声明
void exchange(int *a, int *b);  // 交换a,b的值最好的方法

// 测试函数声明
void test1(void);  // 测试函数1:交换a,b的值
void test2(void);  // 测试函数2:C语言预定义宏
void test3(void);  // 测试函数3:C89与C99标准的区别
void test4(void);  // 测试函数4:输出当前编译器数据类型范围

// 菜单
int menu(void);

/*=============================================================================
               主函数
==============================================================================*/

int main(void)
{
 int cmd = 0;
 
 for (;;)      // 死循环,等价于while(1)
 {
   cmd = menu(); // 读取用户输入的指令
   switch (cmd)
   {
     case 1 : test1();     break;  // 测试函数1:交换a,b的值
     case 2 : test2();     break;  // 测试函数2:C语言预定义宏
     case 3 : test3();     break;  // 测试函数3:C89与C99标准的区别
     case 4 : test4();     break;  // 测试函数4:输出当前编译器数据类型范围
     case -1: exit(0);      break;  // 退出程序
     case -2: system("cls"); break;  // 清空屏幕
     default:break;
   }
 }
 
 return 0;
}

/*=============================================================================
               以下是功能函数实体
==============================================================================*/

/* 交换a,b的值 */
void exchange(int *a, int *b)
{
 *a = *a^*b;
 *b = *a^*b;
 *a = *a^*b;
}

/*=============================================================================
               以下是测试函数实体
==============================================================================*/

/* 交换a,b的值 */
void test1(void)
{
 system("cls");
 int a = 13, b = 14;
 printf("交换之前a = %d, b = %d\n", a, b);
 exchange(&a, &b);
 printf("交换之后a = %d, b = %d\n", a, b);
}

/* C语言预定义宏 */
void test2(void)
{
 system("cls");
 printf("当前代码行号:%d\n", __LINE__);
 printf("当前编译日期:%s\n", __DATE__);
 printf("当前编译时间:%s\n", __TIME__);
 printf("当前文件名称:%s\n", __FILE__);
 printf("当前函数名称:%s\n", __FUNCTION__);
}

/* C89与C99标准的区别 */
void test3(void)
{
 int i;
 system("cls");
 // C99允许在for循环内定义循环变量,而C89不允许
 // gcc -std=c99 test.c -o test.exe
 // for (int i = 0; i < 5; i++)  
 for (i = 0; i < 5; i++)
 {
   printf("hello world!\n");
 }
}

/* 输出当前编译器数据类型范围 */
void test4(void)
{
 system("cls");
 printf("char的范围为: %d —— %d\n", CHAR_MIN, CHAR_MAX);
 printf("unsigned char的范围为: %u —— %u\n\n", 0, UCHAR_MAX);
 
 printf("short的范围为: %hd —— %hd\n", SHRT_MIN, SHRT_MAX);
 printf("unsigned short的范围为: %hu —— %hu\n\n", 0, USHRT_MAX);
 
 printf("int的范围为: %d —— %d\n", INT_MIN, INT_MAX);
 printf("unsigned int的范围为: %u —— %u\n\n", 0, UINT_MAX);
 
 printf("long的范围为: %ld —— %ld\n", LONG_MIN, LONG_MAX);
 printf("unsigned long的范围为: %lu —— %lu\n\n", 0, ULONG_MAX);
 
 printf("long long的范围为: %lld —— %lld\n", LLONG_MIN, LLONG_MAX);
 printf("unsigned long long的范围为: %llu —— %llu\n\n", 0, ULLONG_MAX);
}

/*=============================================================================
               以下是菜单函数
==============================================================================*/

int menu(void)
{
 int cmd = 0;
 char buf[10] = {0};
 
 // 菜单信息输出
 printf("=============================菜单==============================\n");
 printf("[01]测试:交换a,b的值\n");
 printf("[02]测试:C语言预定义宏\n");
 printf("[03]测试:C89与C99标准的区别\n");
 printf("[04]测试:输出当前编译器数据类型范围\n");
 printf("[-1]退出\n");
 printf("[-2]清屏\n");
 printf("===============================================================\n");
 do{
   printf("请输入您的选择:");
   gets(buf);
   cmd = atoi(buf);
 }while (cmd < 1 && cmd > 4);
 
 return cmd;
}



每当需要测试一些知识点时,就可以按照这样子的格式在后边添加,可以很好地进行积累。每天进步一点点,关注小编,每天与小编一起打卡学习吧!


往期精彩推荐

【C语言笔记】ASCII码可见字符与不可见字符

【C语言笔记】如何查看数据类型范围?

【C语言笔记】什么是ANSI C标准?

【C语言笔记】关于随机数的总结

【C语言笔记】变参函数

【C语言笔记】时间日期函数

【Git笔记】分布式版本控制系统

【RT-Thread笔记】裸机系统与多线程系统

关注公众号获取更多资源分享!


后台回复:C101,获取【入门C语言最好的书籍】

后台回复:C000,获取【热门C语言电子书】

后台回复:CV001,获取【郝斌C语言教程视频】

后台回复:CV000,获取【热门C语言视频教程】

后台回复:py100,获取【Python电子书】

后台回复:py001,获取【第一本python入门书】

后台回复:天气预报,获取【天气预报项目源码】

后台回复:py007,获取【机器学习视频教程】

后台回复:py006,获取【Python自动化测试教程】

后台回复:py005,获取【人工智能图像处理视频教程】

后台回复:py004,获取【Python人工智能视频教程】

后台回复:py003,获取【Python入门与进阶视频教程】

后台回复:py002,获取【机器学习经典算法视频教程】



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存