程序给我错误的输出,有人可以看看吗?

时间:2013-12-07 00:03:12

标签: c++

所以这是问题所在: 办公室在8:00:00开始工作,员工可以在17:00:00离开。 编写一个OOP程序,获取员工进入和退出的时间。 如果员工的工作时间晚于8:10:00,程序应该说员工已经延迟,如果超过该员工,应该说员工准时。如果一个人在17:30:00之后退出,该计划应该说该员工已经加班,如果超过该时间,该计划应该说该员工已按时退出。 所以这是代码:

#include <iostream>
using namespace std;
class wTime
{
public:
    void get_entime(int, int, int);
    void get_extime(int, int, int);
    bool calc_en();
    bool calc_ex();
    void show_result();
private:
    int h1, m1, s1;
    int h2, m2, s2;
};
void wTime::get_entime(int x=8,int y=0, int z=0)
{
    x = h1;
    y = m1;
    z = s1;
    cout << "Enter the entry time in 24 hour format (hh mm ss): " << endl;
    cin >> x >> y >> z;
}
void wTime::get_extime(int a=17, int b=0, int c=0)
{
    a = h2;
    b = m2;
    c = s2;
    cout << "Enter the exit time in 24 hour format: (hh mm ss) : " << endl;
    cin >> a >> b >> c;
}
bool wTime::calc_en()
{

    if (h1 > 8)
        return true;//takhir dashte;
    if (h1 == 8 && m1 > 10 )
        return true;//takhir dashte;
    if (h1 < 8)
        return false;//on time boode;
    if (h1 == 8 && m1 < 9)
        return false;//on time boode;
}
bool wTime::calc_ex()
{
    if (h2 > 17)
        return true;//ezafe kari dashte;
    if (h2 >= 17 && m2 >= 30)
        return true;//ezafe kari nadashte
    if (h2 == 17 && m2 < 30)
        return false;
}
void wTime::show_result()
{
    if (calc_en() == true)
        cout << "Employee has delayed." << endl;
    if (calc_en() == false)
        cout << "Employee was on time" << endl;
    if (calc_ex() == true)
        cout << "Employee has stayed an overtime" << endl;
    if (calc_ex() == false)
        cout << "Employee has exited on time." << endl;
}
int main()
{
    wTime em;
    em.get_entime();
    em.calc_en();
    em.get_extime();
    em.calc_ex();
    em.show_result();
    cin.ignore();
    cin.get();
    return 0;
}

问题在于,对于我输入的每一个mm mm ss它只会返回 员工推迟了。 员工已按时退出。 怎么了?

2 个答案:

答案 0 :(得分:2)

当您通过cin获取用户输入时,您将其放入局部变量(特别是函数参数)中,然后立即将其销毁。你实际上并没有将它们存储起来用于后续的计算。

你可能想做这样的事情:

void wTime::get_entime()
{
    cout << "Enter the entry time in 24 hour format (hh mm ss): " << endl;
    cin >> h1 >> m1 >> s1;
}

(同样适用于get_extime())。这将把值存储在成员变量中,以便它们可以在计算方法中使用。

答案 1 :(得分:0)

bool wTime::calc_en()
{ 
    if (h1 > 8)
        return true;//takhir dashte;
    if (h1 == 8 && m1 > 10 )
        return true;//takhir dashte;
    if (h1 < 8)
        return false;//on time boode;
    if (h1 == 8 && m1 < 9)
        return false;//on time boode;
}

你应该输入一个默认的返回值

例如8:10或8:09没有得到评估(wTime :: calc_ex中存在同样的问题)

当然还有前面提到的输入问题