C语言背单词控制台小程序

目录

背景

封装打印函数

时间函数


背景

        用扇贝好久背了好久,依然不记得单词,就想着把那些记完就忘的单词全部shou收集起来,放到我自己的记单词列表中,方便随时可以看;并且做成选择题,可以自己测试;

       边学文件流操作,边写一些功能函数,记录一些自己踩到过的的坑;随机算法还是很Low的随机数,没有的根据单词的掌握程度来挑选单词;

 

封装打印函数

        自己封装一个打印函数,方便一键关闭调试打印;

int g_SHOW_DEBUG = 2;

#define SHOW_NULL 2
#define SHOW_INFO 1
#define SHOW_DEBUG 2
#define ERROR_DEBUG 2

/* **********************https://blog.csdn.net/Code_Franck***********************
    函数描述:使用宏定义封装printf函数;
              *代码调试期间可以把宏SHOW_NULL设置为2,调试完成只需要改这个宏即可清除所有调试打印;
    创建时间:2019/9/8
    参数说明:
            DebugFlag:的SHOW_NULL表示不打印;SHOW_INFO表示正常打印,效果等于printf;SHOW_DEBUG表示打印调试信息,包括函数名和行号;
            ERROR_DEBUG表示错误打印,在打印报错时使用;
    返回值:
            无
********************************************************************************/
#define MyDebug(DebugFlag, format, ...) \
    if(SHOW_DEBUG == DebugFlag){ \
        printf("DEBUG [%s][%d]" format ,__FUNCTION__, __LINE__,##__VA_ARGS__); \
    }else if(SHOW_INFO == DebugFlag) { \
        printf(format ,##__VA_ARGS__); \
    }else {}

如上,传入要给打印的flag,根据flag来选择打印类型;

    SHOW_INFO用来打印程序必要的一些打印,打印方式也是最简单的跟printf一样;

    SHOW_DEBUG用来打印一些调试打印,可以在可以在程序调试的时候使用,调试完删掉即可;

    ERROR_DEBUG打印程序进入错误分支的打印;

    SHOW_NULL ;调试打印全部传入,所以可以在最后,把SHOW_NULL 设置为0即可以删除所有调试打印;并且调试的时候可以打印函数名和行号,非常方便;

    g_SHOW_DEBUG,只需开头设置g_SHOW_DEBUG的值,末尾再恢复回去,即可以实现一次性控制整个函数的打印;详细的使用方法后面代码中可以看到;

时间函数

        在记单词的时候,可以统计整个测试所使用时间,而且实现简单,所以索性就搞了个函数出来;分别是打印当前时间,和打印两次时间戳的时间差;实际这两个函数并没有啥用途,哈哈哈!!!

#pragma once
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include "MyBase.h"
#include <conio.h>
#include "Main.h"

//Sleep(): delay函数,单位毫秒,需要包含头文件windows.h

void GetStartEndTime(tm *StartTime, tm *EndTime, int Mode);
void ShowTime();

/* **********************https://blog.csdn.net/Code_Franck***********************
    函数描述:打印当前系统时间,格式为: 年-月-日 时:分:秒
    创建时间:2019/9/7
    参数说明:
            无
    返回值:
			无
********************************************************************************/
void ShowTime()
{
    int Present_DebugFlag = g_SHOW_DEBUG;
    g_SHOW_DEBUG = 1;
    struct tm t;   //tm结构指针
	time_t now;  //声明time_t类型变量
	time(&now);      //获取系统日期和时间
	localtime_s(&t, &now);   //获取当地日期和时间

	MyDebug(g_SHOW_DEBUG,"Now Time: %04d-%02d-%02d %02d:%02d:%02d\n", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
    g_SHOW_DEBUG = Present_DebugFlag;
    return;
}

/* **********************https://blog.csdn.net/Code_Franck***********************
    函数描述:使用该函数来当前时间或者获取两次时间差。
    创建时间:2019/9/7
    参数说明:
            *StartTime:第一个时间戳
            *EndTime:第二个时间戳
            Mode:函数模式;0表示获取第一个时间,1表示获取第二个时间,并计算两次时间差
    返回值:
            无
********************************************************************************/
void GetStartEndTime(tm *StartTime, tm *EndTime, int Mode)
{
    int Present_DebugFlag = g_SHOW_DEBUG;
    g_SHOW_DEBUG = 1;
    time_t Now_Time;  //声明time_t类型变量
	time(&Now_Time);      //获取系统日期和时间
    char ShowTime[40];
    char TempTime[10];
	int year, mon, day, hour, min, sec;

	switch (Mode) {
	case 0:
		localtime_s(StartTime, &Now_Time);   //获取当地日期和时间
		break;
	case 1:
		localtime_s(EndTime, &Now_Time);   //获取当地日期和时间
		year = EndTime->tm_year - StartTime->tm_year;
		mon = EndTime->tm_mon - StartTime->tm_mon;
		day = EndTime->tm_mday - StartTime->tm_mday;
		hour = EndTime->tm_hour - StartTime->tm_hour;
		min = EndTime->tm_min - StartTime->tm_min;
		sec = EndTime->tm_sec - StartTime->tm_sec;
        strcpy_s(ShowTime, "Using time: ");
		if (year) {
            _itoa_s(sec, TempTime, 10);
            strcat_s(TempTime, "年");
            strcat_s(ShowTime, TempTime);
        }
		if (mon) {
            _itoa_s(sec, TempTime, 10);
            strcat_s(TempTime, "月");
            strcat_s(ShowTime, TempTime);
        }
		if (day) {
            _itoa_s(sec, TempTime, 10);
            strcat_s(TempTime, "日");
            strcat_s(ShowTime, TempTime);
        }
		if (hour) {
            _itoa_s(sec, TempTime, 10);
            strcat_s(TempTime, "时");
            strcat_s(ShowTime, TempTime);
        }
		if (min) {
            _itoa_s(sec, TempTime, 10);
            strcat_s(TempTime, "分");
            strcat_s(ShowTime, TempTime);
        }
        if (sec) {
            _itoa_s(sec, TempTime,10);
            strcat_s(TempTime, "秒");
            strcat_s(ShowTime, TempTime);
        }

        MyDebug(g_SHOW_DEBUG,"%s", ShowTime);
		break;
	default:
        MyDebug(ERROR_DEBUG,"error!!! \n");
	}
    g_SHOW_DEBUG = Present_DebugFlag;
    return;
}

 先写到这好了!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值