我一直在创建一个空闲程序,以便在鼠标和键盘处于非活动状态时在几分钟内计算。这就是我到目前为止所做的:
using namespace std;
while(true)
{
GetLastInputInfo(&last_info);
tickCount = GetTickCount();
int minutes = (tickCount - last_info.dwTime) / 60000;
count++;
if((minutes >= 1) && (count%3000==0))
{
ifstream in("in.txt");
ofstream out("out.txt");
float sum;
in >> sum;
sum = sum++;
out << sum;
out << in.rdbuf();
out.close();
in.close();
}
std::cout << "Idle Time: " << minutes << " minutes." << std::endl;
}
}
当我将它闲置一分钟时,“总和”表示它是1,然后我关闭程序并再次打开它一分钟,“总和”表示它是2.我关闭程序并打开它更多的时间,然后又回到1.为什么会发生这种情况?
答案 0 :(得分:5)
这一行是未定义的行为:
sum = sum++;
您不能在序列点之间多次修改变量。你应该写这个来增加sum
变量:
sum++;
答案 1 :(得分:2)
这就是我的想法。
in.txt的内容 1
out.txt的内容 2 1 2 1
当你从in中读取你的值时,sum = 1; sum ++发生,sum变为2。
2进入out.txt;然后1进入out.txt。然后你打印“空闲时间”。因为总和初始化为1,所以它会四舍五入。
尝试评论此行
out << in.rdbuf();
或声明具有更大范围的和(在文件读取循环之外)
你也似乎永远不会给它增加分钟......
编辑: 试试吧......
if((minutes >= 1) && (count%3000==0))
{
time_t date = time(NULL); //store the time in our date
tm* timePtr = localtime(&t); //now we can extact dates out of it
int day = timePtr->tm_mday;
int month = timePtr->tm_mon;
int year = 1900 + timePtr->tm_year; //trust me, you gotta 1900 to it.
char* filename;
sprintf(filename, "log-%d-%d-%d.txt", day, month, year);
ifstream in(filename);
// float sum; why is this float when we do sum++ below?
int sum;
in >> sum;
sum++;
in.close();
ofstream out(filename);
out << sum;
out.flush();
out.close();
}