Чтение часов и времени событий из текстового файла и обработка - PullRequest
0 голосов
/ 02 ноября 2018

Прежде чем что-то спросить, я должен упомянуть, что у меня слабое основание в C ++. Дайте мне знать, если я ничего не проясню, и я сделаю все возможное, чтобы уточнить.

Моя проблема с кодированием заключается в чтении серии 24-часовых значений времени без включенных секунд и сохранении их в массив структуры. Чтение часов и минут в целочисленном формате и сохранение их в массив структур - вот что я не понимаю в этом. В текстовом файле первое число в каждой строке - это 24-часовое время, а второе число - это количество минут, с которым мне нужно изменить время. Я застрял, просто читая время для начала.

Это код, который у меня есть. Это результат кода.

#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 голосов
/ 02 ноября 2018

Обратите внимание, что каждая строка вашего файла содержит три целых значения, а не два, и что двоеточие прекратит чтение целого значения (форматированный ввод для интегралов пропустит первые пробелы и даже символы новой строки, но не "ведущие" колоны). Если вы хотите прочитать целочисленное значение, которое следует за двоеточием, вам нужно пропустить двоеточие.

Это можно сделать, прочитав двоеточие в переменную типа 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
...