从文本文件中读取时钟时间和事件时间并处理
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
在我提出任何问题之前,我应该提到我的 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