patterncMinor
Aid in making a clock code more modular
Viewed 0 times
moremodularclockcodemakingaid
Problem
Can someone help in making this clock code more modular so I will be able to use it in other bigger projects for example: turn into a c function. Here is the code:
#include
#include
#include
COORD coord = {0, 0};
void gotoxy (int x, int y)
{
coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void delay(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
void showClock(int x_1, int x_2, int x_3,int y){
long i = 0;
clock_t now = 0; int interval = 1;
int elapsed = 0;
int min=0,MIN=0,hrs=0,sec=0;
int d=0,f=0;
now = clock();
for(i = 0L ; ; i++){
elapsed = (clock()-now)/CLOCKS_PER_SEC;
if(elapsed>=interval){
interval += 1;
if(elapsed%60==0){
min=elapsed/60;
d=60*min;
if(min%60==0){
hrs=min/60;
f=60*hrs;
}
}
sec=elapsed-d;
MIN=min-f;
if(hrs<10){
gotoxy(x_1,y);printf("0%d",hrs);
}else{
gotoxy(x_1,y);printf(":%d",hrs);
}
if(min<10){
gotoxy(x_2,y);printf(":0%d",MIN);
}else{
gotoxy(x_2,y);printf(":%2d",MIN);
}
if(sec<10){
gotoxy(x_3,y);printf(":0%d",sec);
}else{
gotoxy(x_3,y);printf(":%2d",sec);
}
}
}
}
int main()
{
showClock(2,4,7,4);
return 0;
}Solution
General comments
You should read the manual pages on
number of seconds.
Also:
-
variables and structure fields are normally not all-uppercase (X,Y,MIN)
-
put a single definition or expression on each line
-
leave a blank line between functions.
-
format string which prints an integer in 2 places, zero-padded if necessary
So for 1, it prints '01' and for 10 it prints '10'.
-
I prefer to see a space after
operators (
-
make all functions
Function
-
I presume you wanted to call
continually using 100% of CPU time. Better would be to use
lets other processes run. So sleep(1) would sleep for 1 second.
-
using
seconds
-
the single printf format "%02d:%02d:%02d" does what you want without pasing
three x-coordinates to the function
-
most of the rest is unnecessary if you use
You should read the manual pages on
time(), which gives you the time in seconds since 1970, library functions such as localtime, strftime and ctime that can be used to present time values and the sleep() function, which sleeps the process for a specifiednumber of seconds.
Also:
-
variables and structure fields are normally not all-uppercase (X,Y,MIN)
-
put a single definition or expression on each line
-
leave a blank line between functions.
-
printf has many formatting options. Of relevance here is the "%02d"format string which prints an integer in 2 places, zero-padded if necessary
So for 1, it prints '01' and for 10 it prints '10'.
-
I prefer to see a space after
while and if etc. and spaces aroundoperators (
!=, %, / etc)-
make all functions
static where possible (in this program, all exceptmain)- your function
delayis not a good way of delaying, as it ties up the processor. Better usesleep
Function
showClock-
I presume you wanted to call
delay, but you didn't. This function loopscontinually using 100% of CPU time. Better would be to use
sleep() whichlets other processes run. So sleep(1) would sleep for 1 second.
-
using
time() would be better than clock(), as you want intervals inseconds
-
the single printf format "%02d:%02d:%02d" does what you want without pasing
three x-coordinates to the function
-
most of the rest is unnecessary if you use
sleep and time and the other library functions to present the time intervalContext
StackExchange Code Review Q#23620, answer score: 3
Revisions (0)
No revisions yet.