• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie z wektorami oraz porównaniem wartości string.

Object Storage Arubacloud
0 głosów
626 wizyt
pytanie zadane 5 stycznia 2020 w C i C++ przez AlexSilesia Nowicjusz (240 p.)

Witam. Zwracam się z prośbą o pomoc lub wskazówkę z następującym zadaniem.

Wczytaj za pomocą standardowego strumienia wejściowego pary dzień tygodnia - liczba. Na przykład:

Wtorek 23 Piątek 56 Wtorek -3 Czwartek 99. Wartości każdego dnia zapisz w osobnym wektorze vector<int>. Wydrukuj wartości z wszystkich siedmiu wektorów. Wydrukuj sumę wartości wszystkich wektorów. Odrzuć niepoprawne nazwy dni tygodnia, typu Piontek, ale przyjmij różne poprawne formy jak piątek cz skrót pią.

Doszedłem do momentu że program prawie gotowy jednak mam problem z wyjściem z pętli while i porównaniem w niej wartości. Po prostu program po wpisaniu znaku wyjściowego ,,|" nadal zostaje w pętli while lub zasypuje ekran tekstem który jest wpisany na początku pętli. Proszę o rade. Pozdrawiam.

 

 

#include "std_lib_facilities.h"
using namespace std;

int main() {
	system("chcp 1250");
	vector<string> dzien;
	vector<int> pn; 
	vector<int> wt;
	vector<int> sr;
	vector<int> cz;
	vector<int> pt;
	vector<int> sb;
	vector<int> nd;
	
	string a = "";
	int b = 0;
	while (true) {

		cout << "Podaj dzien oraz liczbe: \n";
			cin >> a >> b;
			dzien.push_back(a);
			if (a == "Poniedzialek" || "Pon")
				pn.push_back(b);
			else if (a == "Wtorek" || "Wto")
				wt.push_back(b);
			else if (a == "Sroda" || "Sro")
				sr.push_back(b);
			else if (a == "Czwartek" || "Czw")
				cz.push_back(b);
			else if (a == "Piatek" || "Pia")
				pt.push_back(b);
			else if (a == "Sobota" || "Sob")
				sb.push_back(b);
			else if (a == "Niedziela" || "Nie")
				nd.push_back(b);
			else 
				break;
			

}
	int s = 0;
	for (int i = 0; i < pn.size(); ++i) {
		cout << pn[i] << " ";
		s += pn[i];
	}
	for (int i = 0; i < wt.size(); ++i) {
		cout << wt[i] << " ";
		s += wt[i];
	}
	for (int i = 0; i < sr.size(); ++i) {
		cout << sr[i] << " ";
		s += sr[i];
	}
	for (int i = 0; i < cz.size(); ++i) {
		cout << cz[i] << " ";
		s += cz[i];
	}
		for (int i = 0; i < pt.size(); ++i) {
			cout << pt[i] << " ";
			s += pt[i];
		}
		for (int i = 0; i < sb.size(); ++i) {
			cout << sb[i] << " ";
			s += sb[i];
		}
		for (int i = 0; i < nd.size(); ++i) {
			cout << nd[i] << " ";
			s += nd[i];

		}
		cout << "Suma : " << s;



		return 0;


}

 

1 odpowiedź

0 głosów
odpowiedź 5 stycznia 2020 przez tkz Nałogowiec (42,000 p.)
Błędne if'y w pętli.
komentarz 6 stycznia 2020 przez AlexSilesia Nowicjusz (240 p.)

Dziękuję za pomoc. Po zmianie ifów  z

,,(a == "Poniedzialek" || "Pon"); na

,,((a == "Poniedzialek") || (a =="Pon"));

program działa dobrze.

A czy kolega mógłby spojrzeć jeszcze na ten kod? Dlaczego po wyjściu z pętli while program nie czeka na wprowadzenie liczby przez polecenie cin tylko kończy działanie?

#include "std_lib_facilities.h"
using namespace std;

int main() {
	system("chcp 1250");
	vector<int> liczby;
	int l;
int k;
	while (cin >> l) {

		
				liczby.push_back(l);



	}
	cout << "Ile liczb chcesz zsumowac?:\n";
	
	cin >> k;

	for (int i = 0; i < k; i++)
	cout << liczby[i] << " \n" ;

}

 

komentarz 6 stycznia 2020 przez j23 Mędrzec (194,920 p.)

A jak kończysz działanie pętli while? Bo jeśli to robisz przez wpisanie "nieliczby", to odpowiedź jest prosta: strumień wchodzi w stan fail i nic z nim nie zrobisz, dopóki nie zresetujesz flagi błędu metodą clear. Metodą ignore powinieneś także odczytać dane, które spowodowały przejście w stan błędu.

Podobne pytania

0 głosów
1 odpowiedź 684 wizyt
pytanie zadane 24 marca 2020 w C i C++ przez wall7489 Obywatel (1,250 p.)
0 głosów
1 odpowiedź 305 wizyt
pytanie zadane 6 lipca 2016 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
2 odpowiedzi 247 wizyt
pytanie zadane 21 czerwca 2016 w Java przez windsmasher Nowicjusz (170 p.)

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...