提问人:Holden Tatlow 提问时间:2/26/2018 更新时间:2/26/2018 访问量:60
EOF 循环在最终结束之前重复行 3 次
EOF loop repeats lines 3 times before finally ending
问:
我有一个作业,给我一个文件,其中包含编号格式的日期,我必须让一个程序读取该文件,并为每个日期吐出一周中的几天。文件的每一行都是一个单独的日期。我的首选方法是 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
答:
4赞
Lightness Races in Orbit
2/26/2018
#1
你似乎试图同时使用三件事。date
int date;
inFile >> date;
在这里你读到一个数字。一。不是三个;一.
while (!inFile.eof()){
在这里,你犯了一个大罪;这不是循环输入的方法。
inFile >> date;
day = getWeekDay(date, date, date);
在这里,你读另一个数字,并将其传递给三次。getWeekDay
你的循环一直持续到没有更多的数字可以读取(某种程度上:参见上面关于该用法的注释),在你的情况下,这将花费你预期的三倍的时间(即 30 而不是 10),因为你读取的数字是你想象的三分之一(再次,见上文)。eof
您需要对要读取的每个数字进行操作。>>
下面是程序的改进版本:
#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;
}
}
评论
day = getWeekDay(date, date, date);
什么。.open()
.close()