Reputation: 61
For example When I input a 8 3 2020 that should make the if statement true as 8 3 2020 are values that can be found in the array but instead it returns false
Here is main
/*
* Homework 4 -- UPDATE as needed
*/
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include "Appointment.h"
using namespace std;
void callPrint (Time &TimeOrApptObject) { TimeOrApptObject.print();}
int main(){
int month, day, year, hour, minute,howLong;
Appointment myAppointments[19];
ifstream HW4DataFileHandle;
HW4DataFileHandle.open("Lab6Data.txt");
while (!HW4DataFileHandle.eof( )) {
for (int i = 1; i < 20; i++) {
HW4DataFileHandle>>month;
HW4DataFileHandle>>day;
HW4DataFileHandle>>year;
HW4DataFileHandle>>hour;
HW4DataFileHandle>>minute;
HW4DataFileHandle>>howLong;
myAppointments[i] = Appointment( month, day, year, hour, minute, howLong);
}
cout <<"enter a month" <<endl;
cin >> month;
cout <<"enter a day" <<endl;
cin >> day;
cout <<"enter a year"<<endl;
cin >> year;
Date myDate( month, day, year);
cout <<"Appointments for" << month <<"/" << day <<"/" << year <<":"<< endl;
for (int i = 0; i <13; i++){
if ( friendTorCompare2Dates(myAppointments[i], myDate))
{ Time thisTime = myAppointments[i];
thisTime.print();
cout << endl;
}
}
}
}
Date.h
// Date.h -- Class Date UPDATE as needed
#ifndef DATE_H
#define DATE_H
class Date {
private:
int month;
int day;
int year;
public:
Date(int m, int d, int y) : month(m), day(d), year(y)
{
}
Date() = default;
friend bool friendTorCompare2Dates (const Date&,const Date& );
};
bool friendTorCompare2Dates (const Date& Right, const Date& Left)
{
if (Right.month == Left.month && Right.day == Left.day && Right.year== Left.year)
return true;
else
return false;
}
#endif
Time.h
//Time.h -- Class Time UPDATE as needed
#ifndef TIME_H
#define TIME_H
using namespace std;
#include<iostream>
class Time {
private :
int hour; int minute;
public:
Time(int h, int m) : hour(h)
{
}
Time() = default;
virtual void print() {
cout << hour << " " << minute <<" " ;
}
};
#endif
Appointment.h
// Appointment.h -- Class Appointment UPDATE as needed
//
#include "Time.h"
#include "Date.h"
#ifndef APPOINTMENT_H
#define APPOINTMENT_H
using namespace std;
class Appointment: public Date, public Time {
private:
int howLong;
public:
Appointment(int month, int day, int year, int hour, int minute, int howLong) :
Date(month, day, year), Time(hour, minute), howLong(howLong)
{
}
Appointment() = default;
};
#endif
What do I need to change about my code so that when I input the correct values it will return true? Please provide an example in your answer it would be greatly appreciated. Thank you for your time.
Upvotes: 0
Views: 99
Reputation: 14614
The bug here is not in incorrect condition within if (which should work perfectly), it's due to incorrect behavior of program. You're going out of bounds here:
for (int i = 1; i < 20; i++) {
HW4DataFileHandle>>month;
HW4DataFileHandle>>day;
HW4DataFileHandle>>year;
HW4DataFileHandle>>hour;
HW4DataFileHandle>>minute;
HW4DataFileHandle>>howLong;
myAppointments[i] = Appointment( month, day, year, hour, minute, howLong);
}
As you declared myAppointments as array of 19 elements, it got index with legal range from 0 to 18. Not from 1 to 20. myAppointments[0]
never got assigned, 19th and 20th records disappeared in the Great Undefined Unknown.
And here you check only part of array, the first 13 elements (including unassigned one), is that intended?
for (int i = 0; i <13; i++){
if ( friendTorCompare2Dates(myAppointments[i], myDate))
{ Time thisTime = myAppointments[i];
thisTime.print();
cout << endl;
}
}
This is an example of "magic number" fallacy.
Upvotes: 3