Operacje na wektorach i stringach

0

Witam!
Mam problem. Treść zadania niżej. Kod również niżej. Nie mam pojęcia czemu to nie działa. A może robię złym sposobem. Proszę o nakierowanie lub poprawienie błędu:)

screenshot-20191031184012.png

#include <iomanip>
#include <fstream>
#include <iostream>
#include <vector>

int main(int argc, char *argv[]) {


std::ifstream input ("input.txt");
std::vector<int> number;
std::vector<int> we;



char znak;
int sumo;
int y;
int pam;
for ( int h,m ; input >> h >>znak >> m ; ) {

int pom=h*60;
    int sum=pom +m;

    number.push_back(sum);




}
for ( int ho,mi ; std::cin >> ho >>znak >> mi ; ) {

int pomo=ho*60;
sumo=pomo+mi;
we.push_back(sumo);

		}
while (we[0]<=number[y]) {
pam=y++;
}
int hello=number[pam+1];

double hours, minutes;

minutes= hello%60;
hours=hello/60;


std::cout << hours << ":" << minutes;



 input.close();
}

0

pętla while u mnie źle działa. Nie wiem jaki jest problem.

1

Przejechałeś to debugerem? A jakby zrobić strukturę godzina, operację porównania i wyszukiwac odpowiedniej, mając dana godzinę? Było by prościej i łatwiej debugować.

1

No while jest źle.
Wczytujesz sobie np. 12:05 i w pętli while sprawdzasz coś w stylu "dopóki podana godzina jest mniejsza od wczytanej to zwiększaj indeks" ale w tym przypadku podana godzina jest większa od najmniejszej wczytanej przez co nie wchodzisz do pętli while a w konsekwencji wypisujesz pierwszą wczytaną godzinę.

2

Po kiego ci tablice?

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

void encode(int &hm,int h,int m) { hm=h*100+m; }
void decode(int hm,int &h,int &m) { h=hm/100; m=hm-100*h; }
void show(int hm)
{
	int h,m;
	decode(hm,h,m);
	cout<<setfill('0')<<setw(2)<<h<<":"<<setfill('0')<<setw(2)<<m;
}
void show(int prev,int curr)
{
	cout<<"in: "; show(prev);
	cout<<" out: "; show(curr);
	cout<<endl;
}

int main() 
{
	//ifstream input("input.txt");
	istream &input=cin;
	int h,m,hm,prev=-1,first=-1;
	for(char sign;input>>h>>sign>>m;prev=hm)
	{
		encode(hm,h,m);
		if(first<0) prev=first=hm;
		else show(prev,hm);
	}
	show(prev,first);
	cout<<"in: ";
	return 0;
}
0

dziękuje , udało mi się za pomoca rad i kodu zmienić program tak, że działa. Dziękuje :)

0

Tak a propos bez tego bezsensownego ograniczenia przechowywać w godziny i minuty w jednej zmiennej typu int wyszło by znacznie prościej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1