从文本文件中读取时钟时间和事件时间并处理

Reading clock times and event times from text file and processing

在我提出任何问题之前,我应该提到我的 C++ 基础不牢。如果我不清楚任何事情,请告诉我,我会尽力澄清。

我这里的编码问题是读取一系列 24 小时时间值,不包括秒,并将它们存储到结构数组中。以整数格式读取小时和分钟,并将其存储到结构数组中是我不理解的。在文本文件中,每一行的第一个数字是 24 小时制,第二个数字是我需要修改时间的分钟数。我刚开始阅读时就被冻结了。

这是我目前的代码。This is the result of the code.

#include <iostream>
#include <fstream>
using namespace std;

int main(){
int size = 7;
int i;

struct Times {
    int T;
    int M;
};
Times clock[7];

ifstream infile;
infile.open("times.txt");
for (i=0; i<size; i++){
    infile>>clock[i].T>>clock[i].M;
}
for (i=0; i<size; i++){
    cout<<clock[i].T << " "
        <<clock[i].M <<endl;
}
}

这是文本文件的内容:

6:45   39   
12:00  73   
 0:00   4   
23:59   1   
22:45  70   
11:59   1   
14:15  95   

这是似乎有效的更新代码:

#include <iostream>
#include <fstream>
using namespace std;



int main(){
int size = 7;
int i;
char colon;

struct Times {
    int hour;
    int minute;
    int M;
};
Times clock[7];

ifstream infile;
infile.open("times.txt");
for (i=0; i<size; i++){
    infile>>clock[i].hour>>colon>>clock[i].minute>>clock[i].M;
}
for (i=0; i<size; i++){
    cout<<clock[i].hour << " "
        <<colon << " "
        <<clock[i].minute << " "
        <<clock[i].M
        <<endl;
}
}

请注意,文件的每一行都包含三个整数值,而不是两个,并且冒号将停止读取整数值(整数的格式化输入将跳过前导空格甚至换行符,但不会 "leading"冒号)。如果要读取冒号后的整数值,则需要跳过冒号。

您可以通过将冒号读入 char 类型的变量(然后忽略它)来做到这一点。代码可能如下所示:

int main()
{
    int hour,minute,x;
    char colon;
    stringstream s { "15:43 10\n16:48 20\n" };
    while (s >> hour >> colon >> minute >> x) {
        cout << "H:M=" << hour << ":" << minute << "; times=" << x << std::endl;
    }
}

输出:

H:M=15:43; times=10
H:M=16:48; times=20