例如,当我输入8 3 2020时,应使if语句为8 3 2020为true,这些值可以在数组中找到,但返回false。
这是主要的
/*
* 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
约会。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
我需要对代码进行哪些更改,以便在输入正确的值时返回true?请在您的答案中提供示例,我们将不胜感激。谢谢您的时间。
答案 0 :(得分:3)
如果不是(应该正常运行),这里的错误不是处于错误状态,这是由于程序的错误行为引起的。 您将在这里出界:
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);
}
当您将myAppointments声明为由19个元素组成的数组时,它的索引范围为0到18,而不是1到20。myAppointments[0]
从未得到分配,第19和20个记录在“ Great Undefined Unknown”中消失了。
在这里,您仅检查数组的一部分,即前13个元素(包括未分配的元素),是想要的吗?
for (int i = 0; i <13; i++){
if ( friendTorCompare2Dates(myAppointments[i], myDate))
{ Time thisTime = myAppointments[i];
thisTime.print();
cout << endl;
}
}
这是“幻数”谬论的一个例子。