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

时间:2018-11-02 09:38:42

标签: c++ filestream

在我提出任何问题之前,我应该提到我在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;
}
}

1 个答案:

答案 0 :(得分:1)

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

您可以通过将冒号读入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