1

ですから、私はこの問題にしばらく取り組んできましたが、メンバーの助けを借りて、ほぼ完成しました。これについての私の最後の質問は上にあります。

必要に応じて、cout時間を01:01:01にフォーマットする必要がありますが、出力は1:1:1です。

問題はここにあります:

std::ostream& operator<< (ostream& os, const MyTime& m)
{
    os << setfill('0') << m.hours << ":" << setfill ('0') << m.minutes << ":" << setfill ('0') << m.seconds;
    return os;
}

これがコード全体です。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <iomanip>


using namespace std;
struct MyTime { int hours, minutes, seconds; };
MyTime DetermineElapsedTime(const MyTime *t1, const MyTime *t2);

const int hourSeconds = 3600;
const int minSeconds = 60;
const int dayHours = 24;
const char zero = 0;

MyTime DetermineElapsedTime(const MyTime *t1, const MyTime *t2)
{
    long hourDiff = ((t2->hours * hourSeconds) - (t1->hours * hourSeconds));
    int timeHour = hourDiff / hourSeconds;
    long minDiff = ((t2->minutes * minSeconds) - (t1->minutes * minSeconds));
    int timeMin = minDiff / minSeconds;
    int timeSec = (t2->seconds - t1 -> seconds);
    MyTime time;
    time.hours = timeHour;
    time.minutes = timeMin;
    time.seconds = timeSec;
    return time;
}

std::ostream& operator<< (ostream& os, const MyTime& m)
{
    os << setfill('0') << m.hours << ":" << setfill ('0') << m.minutes << ":" << setfill ('0') << m.seconds;
    return os;
}

int main(void)
{
    char delim1, delim2;
    MyTime tm, tm2;
    cout << "Input two formats for the time. Separate each with a space. Ex: hr:min:sec\n";
    cin >> tm.hours >> delim1 >> tm.minutes >> delim2 >> tm.seconds;
    cin >> tm2.hours >> delim1 >> tm2.minutes >> delim2 >> tm2.seconds;

    if (tm2.hours <= tm.hours && tm2.minutes <= tm.minutes && tm2.seconds <= tm.seconds)
        {
            tm2.hours += dayHours;
        }
    cout << DetermineElapsedTime(&tm, &tm2);


    return 0;

}

この問題を解決するための洞察は大歓迎です。さらに詳しい情報が必要な場合はお問い合わせください。

4

1 に答える 1

7

setwまた、出力をパディングする必要があることをストリームに通知するために呼び出す必要があります。とは対照的にsetfillsetwは次の出力にのみ適用されることに注意してください。

std::ostream& operator<< (ostream& os, const MyTime& m)
{
    return os << setfill('0') << setw(2) << m.hours << ":"
              << setw(2) << m.minutes << ":"
              << setw(2) << m.seconds;
}
于 2012-11-12T09:11:53.607 に答える