使用C语言的秒表

用C语言创建一个在linux基础系统上运行的数字秒表程序。

null

键盘点击 函数简单地代表键盘点击。按下一个键后,它生成一个信号并返回一个非零整数。其中有4个循环,第一个循环持续数小时,第二个循环持续数分钟,第三个循环持续数秒,第四个循环持续数秒(3个循环)。运行该程序后,它会等待键盘开始键被按下,当按下该键时,它会生成一个信号。为了存储键盘键,有一个变量(c),如果c等于 p键 然后调用wait函数。线程在后台运行,我们正在等待开始键被按下。按s键后,线程再次跳转到thread_join函数,如果 r键 按下,然后跳入重置标签,所有循环再次以零开始,如果 钥匙 按下后,跳入开始标签,如果 e键 被按下时,调用exit()函数,程序终止。

先决条件: c语言中的线程 , 等待系统调用

To execute the program we use following command :
图片[1]-使用C语言的秒表-yiteyi-C++库 
Input:
Press a key :
s -> start
e -> exit
r -> reset
p -> pause

Output :
图片[2]-使用C语言的秒表-yiteyi-C++库

// C code to create stop watch
// Header file for necessary system library
#include <fcntl.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
// starting from zero
#define MIN 0
// 1 hr= 60 min ; 1 min= 60 sec
#define MAX 60
#define MILLI 200000
int i, j, k, n, s;
char c;
pthread_t t1;
// Function to perform operations
// according keyboeard hit.
int keyboardhit( void )
{
struct termios oldt, newt;
int ch;
int oldf;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
ch = getchar ();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
fcntl(STDIN_FILENO, F_SETFL, oldf);
if (ch != EOF) {
ungetc (ch, stdin);
return 1;
}
return 0;
}
// display stopwatch on screen
void print()
{
// clear screen escape sequence
printf ( " 33[2J 33[1;1H" );
// Display Hour Min Sec in screen
printf ( "TIME Hr: %d Min: %d Sec: %d" , n, i, j);
}
// function to pause stopwatch
void * wait( void * arg)
{
while (1) {
// wait for keyboard signal if keyboard
// hit it return non integer number
if (keyboardhit()) {
// take input from user and do
// operation accordingly
c = getchar ();
if (c == 'S' || c == 's' ) {
break ;
}
else if (c == 'r' || c == 'R' ) {
s = 1;
break ;
}
else if (c == 'e' || c == 'E' )
exit (0);
}
}
}
// driver code
int main()
{
// label to reset the value
reset:
n = MIN;
i = MIN;
j = MIN;
k = MIN, s = MIN;
print();
while (1) {
/* s for start
e for exit
p for pause
r for reset
*/
if (keyboardhit()) {
c = getchar ();
if (c != 's' )
continue ;
for (n = MIN; n < MAX; n++) {
for (i = MIN; i < MAX; i++) {
for (j = MIN; j < MAX; j++) {
for (k = MIN; k < MILLI; k++) {
start:
print();
if (keyboardhit()) {
c = getchar ();
if (c == 'r' || c == 'R' )
goto reset;
else if (c == 'e' || c == 'E' )
exit (0);
else if (c == 's' || c == 'S' )
goto start;
else if (c == 'P' || c == 'p' ) {
pthread_create(&t1, NULL, &wait, NULL);
// waiting for join a thread
pthread_join(t1, NULL);
if (s == 1)
goto reset;
}
}
}
}
}
}
}
}
return 0;
}


输出:


图片[2]-使用C语言的秒表-yiteyi-C++库
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享