• 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.

Konkurs Mistrz Programowania
0 głosów
1,043 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,040 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 (195,220 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ź 1,671 wizyt
pytanie zadane 24 marca 2020 w C i C++ przez wall7489 Obywatel (1,280 p.)
0 głosów
1 odpowiedź 517 wizyt
pytanie zadane 6 lipca 2016 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
2 odpowiedzi 398 wizyt
pytanie zadane 21 czerwca 2016 w Java przez windsmasher Nowicjusz (170 p.)

93,659 zapytań

142,577 odpowiedzi

323,100 komentarzy

63,176 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

Kursy INF.02 i INF.03
...