请看下文。
C语言 简单秒表程序使用攻略
程序功能
本程序实现的是一个简单的秒表,用户可以通过程序的命令行界面启动计时和停止计时。程序会不断输出经过的时间,以秒为单位。
程序实现
本程序使用了C语言编写,主要使用了标准库
程序主要有三个部分组成:
- 主函数:获取用户命令(开始、停止、退出)并调用相应的函数。
- 线程函数:计算时间并输出到控制台。
- 辅助函数:获取系统时间并计算时间差。
具体实现细节详见程序代码。
使用攻略
程序启动后,会在命令行界面等待用户命令。用户可以输入以下三个命令:
- start 或 s:启动计时。
- stop 或 p:停止计时。
- quit 或 q:退出程序。
用户输入命令后,程序会立即执行相应的操作。计时时间会在控制台输出,直到用户停止计时。
示例1
用户输入以下命令:
start
程序会开始计时并在控制台输出时间。
用户继续输入以下命令:
stop
程序会停止计时,并在控制台输出时间差。
示例2
用户输入以下命令:
start
程序会开始计时并在控制台输出时间。
用户在一段时间后继续输入以下命令:
stop
程序会停止计时,并在控制台输出时间差。
用户可以再次输入以下命令:
start
程序会继续计时,并在控制台输出经过的时间。用户可以在需要的时候停止计时。
程序代码
以下为完整的程序代码,请注意使用代码时需要自行添加必要的注释和格式化。
#include <stdio.h>
#include <time.h>
#include <pthread.h>
// 程序运行标志位
int running = 0;
// 开始计时时间戳
time_t start_time;
// 真正计时的线程函数
void* timer_func(void* arg)
{
// 计时变量
time_t cur_time, diff_time;
long int diff_sec;
while (running)
{
// 获取当前时间
cur_time = time(NULL);
// 计算时间差
diff_time = cur_time - start_time;
// 输出时间差
diff_sec = *(long int*)(&diff_time);
printf("\rTime elapsed: %ld seconds", diff_sec);
// 休眠100毫秒
usleep(100000);
}
// 退出线程
pthread_exit(NULL);
}
// 获取当前时间,并转换为time_t类型
time_t get_cur_time()
{
time_t cur_time;
struct tm* tm_info;
time(&cur_time);
tm_info = localtime(&cur_time);
tm_info->tm_sec = 0;
tm_info->tm_min = 0;
tm_info->tm_hour = 0;
return mktime(tm_info);
}
// 开始计时
void start_timer()
{
// 检查程序是否已经在计时
if (running)
{
printf("Timer already started!\n");
return;
}
// 设置开始计时时间
start_time = time(NULL);
// 启动计时线程
running = 1;
pthread_attr_t attr;
pthread_t tid;
pthread_attr_init(&attr);
pthread_create(&tid, &attr, timer_func, NULL);
}
// 停止计时
void stop_timer()
{
// 检查程序是否已经在计时
if (!running)
{
printf("Timer not running!\n");
return;
}
// 停止计时线程
running = 0;
printf("\n");
}
// 主函数
int main()
{
// 获取用户命令
char cmd[10];
while (1)
{
printf("Enter command: ");
scanf("%s", cmd);
if (strcmp(cmd, "start") == 0 || strcmp(cmd, "s") == 0)
start_timer();
else if (strcmp(cmd, "stop") == 0 || strcmp(cmd, "p") == 0)
stop_timer();
else if (strcmp(cmd, "quit") == 0 || strcmp(cmd, "q") == 0)
break;
else
printf("Invalid input!\n");
}
return 0;
}