EOF循环在最终结束之前重复3次线



我有一个分配,在该分配中,我给了一个包含编号格式日期的文件,我必须让一个程序读取文件,并在每个日期给出的一周中的几天吐出。文件的每一行都是单独的日期。我的首选方法是EOF循环。但是,我的文件有10个日期,我的输出有30个。这是我的主要上下文。

int main()
{
    ifstream inFile;
    inFile.open("/Users/holdentatlow/Desktop/date 2");
    const char *Names[] = {"Sunday","Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday"};
    int day = 0;
    int date;
    inFile >> date;
    cout << "Day : " << Names[day] << endl;
    while (!inFile.eof()){
        inFile >> date;
        day = getWeekDay(date, date, date);
        cout<< "Day : "<< Names[day] <<endl;
    }
    inFile.close();
    return 0;
}

另外,我给人的印象是它的日期确实不是完全准确的。我没有决心单独检查每个人,但结果似乎不足以不简单地重复。

这是我从

中获取的文件
0 10  1900
2 16 1900
1 2 1944
0 1 2004
1 29 2004
11 24 2002
6 2 2050
2 23 2004
0 6 1812
1 3 1800

您似乎正在尝试使用date一次含义三件事。

int date;
inFile >> date;

在这里您阅读了一个号码。一。不是三个;一个

while (!inFile.eof()){

在这里您犯下了基本罪;那不是如何循环输入。

inFile >> date;
day = getWeekDay(date, date, date);

在这里您阅读另一个一个编号,然后将其传递给getWeekDay三次。

您的循环一直持续到没有更多的数字可读取为止(有点:有关eof使用的注释(,在您的情况下,这将是您预期的三倍(即30不是10(,因为您阅读了第三个数字是您想象的(同样,请参见上文(。

您需要一个>>操作。

这是您程序的改进版本:

#include <fstream>
#include <istream>
#include <iostream>
// Assumed defined elsewhere
int getWeekDay(int date, int month, int year);
int main()
{
    std::ifstream inFile("/Users/holdentatlow/Desktop/date 2");
    static const char* Names[] = {
       "Sunday",
       "Monday",
       "Tuesday",
       "Wednesday",
       "Thursday",
       "Friday",
       "Saturday"
    };
    int date, month, year;
    while (inFile >> date >> month >> year) {
       const int day = getWeekDay(date, month, year);
       std::cout << "Day : " << Names[day] << std::endl;
    }
}

最新更新