[英]Why is if statement returning false when it should be true?
例如,當我輸入一個 8 3 2020 時,它應該使 if 語句為 true,因為 8 3 2020 是可以在數組中找到的值,但它返回 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;
}
}
}
}
日期.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
時間.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? 請在您的回答中提供一個示例,我們將不勝感激。 感謝您的時間。
這里的錯誤不是在 if 中處於不正確的狀態(應該可以完美地工作),這是由於程序的不正確行為造成的。 你在這里越界了:
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 到myAppointments[0]
從未被分配,第 19 條和第 20 條記錄在 Great Undefined Undefined 中消失了。
在這里你只檢查數組的一部分,前 13 個元素(包括未分配的元素),這是有意的嗎?
for (int i = 0; i <13; i++){
if ( friendTorCompare2Dates(myAppointments[i], myDate))
{ Time thisTime = myAppointments[i];
thisTime.print();
cout << endl;
}
}
這是“幻數”謬誤的一個例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.