簡體   English   中英

為什么 if 語句在應該為真時返回假?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM