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[]);

}

...
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 with string_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.

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.

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!

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;
}
This article has been dead for over six months. Start a new discussion instead.