用C语言创建一个在linux基础系统上运行的数字秒表程序。
null
键盘点击 函数简单地代表键盘点击。按下一个键后,它生成一个信号并返回一个非零整数。其中有4个循环,第一个循环持续数小时,第二个循环持续数分钟,第三个循环持续数秒,第四个循环持续数秒(3个循环)。运行该程序后,它会等待键盘开始键被按下,当按下该键时,它会生成一个信号。为了存储键盘键,有一个变量(c),如果c等于 p键 然后调用wait函数。线程在后台运行,我们正在等待开始键被按下。按s键后,线程再次跳转到thread_join函数,如果 r键 按下,然后跳入重置标签,所有循环再次以零开始,如果 钥匙 按下后,跳入开始标签,如果 e键 被按下时,调用exit()函数,程序终止。
To execute the program we use following command :![]()
Input: Press a key : s -> start e -> exit r -> reset p -> pause Output :![]()
// 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; } |
输出:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END