954,505 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

program help

Hi
i'm having a few problems..i'm trying to do a time class
that holds the hr, min , and meridian( am or Pm).
this is what i have so far. For the void set how would i set the char mer[] to am or pm.
class Time
{
long hr, min;
char meridian[5];

public:

void Set(long h, long m, char mer[]);
void Set(char string_time[]);

}

mike3x1
Newbie Poster
1 post since Jun 2004
Reputation Points: 11
Solved Threads: 0
 
... For the void set how would i set the char mer[] to am or pm. ...


The sprintf function should work for that:

#include <stdio.h>

void Set(char string_time[])
{
    sprintf(meridian, string_time);
}

If you do this withstring_time larger than meridian, it will crash and burn horribly.

I recommend that you don't store and manipulate that value as a char array. If it's only going to ever have two distinct values, it's a lot easier to handle if you use a simpler type, like an int, for example. Just decide on a meaning for the simpler variable, e.g. a zero int value means "AM" and nonzero means "PM". If you're writing C++, then a bool is even better--it only has two possible values. The only time you need text is when you're displaying the time for a human being, which can be done in a separate function that interprets the numeric values and prints out the textual meaning. This will make your code simpler and easier to work with.

gusano79
Posting Pro
521 posts since May 2004
Reputation Points: 182
Solved Threads: 77
 

There is a time structure you know-- see gettime() : :lol:

Fili
Light Poster
34 posts since Jun 2004
Reputation Points: 16
Solved Threads: 0
 

There certainly is... Using the library functions as much as possible is good (code reuse, more sleep)--but it can be quite educational to write your own as well. It builds character, puts hair on your eyeballs, that sort of thing.

gusano79
Posting Pro
521 posts since May 2004
Reputation Points: 182
Solved Threads: 77
 

It depends on what you want to DO with this class, of course, but if it were me I'd either make meridian stored as a bool or just store the time as 24 hour time.

Say your class was like this:

class ATimeOfDay
{
int hours, minutes;
bool AM;

public:

// meridian had better be "am" or "pm" or "AM" or "PM" or the like!
// hours can be 0..12, minutes 0..59.
// anything else returns false.
bool SetTime( int hours, int minutes, const char* meridian );

// here hours can be 0..23 and minutes 0..59.
// hours >= 12 implies 'pm'
bool Set24HourTime( int hours, int minutes );

// initialize in constructor
ATimeOfDay();
};

So, the advantage of a bool for AM means you don't have to constantly test against some string. You can say:

if (AM) printf("It is the morning\n");

rather than

if (strcmp(meridian,"am")==0) printf("It is the morning\n");

Just a suggestion!

Chainsaw
Posting Pro in Training
436 posts since Jun 2004
Reputation Points: 36
Solved Threads: 11
 
Hi i'm having a few problems..i'm trying to do a time class that holds the hr, min , and meridian( am or Pm). this is what i have so far. For the void set how would i set the char mer[] to am or pm.
class time 
{
private:
    int hour, minute;
public:
   void set(int h, int m, bool am);
   void display();
};

void time::set(int h, int m, bool am)
{
    minute = m;
    if am
       hour=h;
    else
       hour=h+12;
}
void time::display()
{
    if(hour<13)
        cout<<hour<<":"<<minute<<" am"<<endl;  //or whatver output function you use
    else
        cout<<hour-12<<":"<<minutes<<" pm"<<endl;
}
K-1
Newbie Poster
6 posts since Jun 2004
Reputation Points: 12
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You