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

Problem w petli do.while, liczenie zmiennych.

VPS Starter Arubacloud
0 głosów
318 wizyt
pytanie zadane 28 marca 2017 w C i C++ przez seniu92 Nowicjusz (120 p.)

Witam!

Mam maly problem z programem ktory robie na studia na zaliczenie.

Program ma sluzyc do liczenia glosow w wyborach prezydenckich i na podstawie tych glosow wskazac zwyciezce.

O to co udalo mi sie do tej pory napisac:

#include<iostream>
using namespace std;
int main()
{
int choice;
double  votes = 0, hc = 0, dt = 0, mo = 0, it = 0;

do{
cout<<"\n\n\tElectronic Vote System"
"\n\n1)Hillary Clinton"
"\n2)Donald Trump"
"\n3)Michele Obama"
"\n4)Ivanka Trump"
"\n\nCast your ballot for? ( 1, 2, 3, or 4)" ;
cin>>choice;
if (choice==1) votes = votes + 1, hc = hc+1;
if (choice==2) votes = votes + 1, dt = dt+1;
if (choice==3) votes = votes + 1, mo = mo+1;
if (choice==4) votes = votes + 1, it = it+1;
if (choice!=1,2,3,4) cout<<"error";
}while (choice!=5);

cout<<"\n\nFINAL TALLY["<<votes<<" total votes cast]";
cout<<"\nHillary Clinton - "<<hc;
cout<<"\nDonald Trump - "<<dt;
cout<<"\nMichele Obama -"<<mo;
cout<<"\nIvanka Trump -"<<it;



return 0;

}

Pierwszy problem pojawil mi sie przy lini 20. Musze kazac programowi napisac "ERROR" kiedy wybor nie jest jakims kandydatem czyli 1,2,3,4 albo zakonczeniem wyborow czyli 5, a nastepnie petla ma byc kontynuowana. Dotyczy to rowniez wpisania czekogolwiek, nie tylko liczb. Zamiast tego za kazdym razem wyskakuje mi error i petla sie powtarza (nawet jesli dobrze zaglosuje), a jezeli wpisze cos innego niz liczby petla zaczyna wyskakiwac w nieskoczonosc.

Nastepnym problemem bylo wskazanie zwyciezcy. Napisalem cos w stylu

if(hc>dt,mo,it) cout<<"\nThe winner is: Hillary Clinton!";

i takie linie dla kazdego z kandydatow, ale nie dzialalo.

 

Tak wiec potrzebuje zeby mi ktos napisal lub naprowadzil na to jak mam zmienic linie

if (choice!=1,2,3,4) cout<<"error";

tak zeby kiedy wpisze cokolwiek nie liczac 1,2,3,4,5 to wyskakiwalo "error" i zeby petla dalej dzialala, oraz zeby na koniec wskazalo zwyciezce oraz miejsca jakie poszczegolny kandydat zdobyl, nawet jezeli ktorys z kandydatow mial by tyle samo glosow musze wskazac remis.

2 odpowiedzi

0 głosów
odpowiedź 28 marca 2017 przez degrek Bywalec (2,380 p.)

Nie możesz w If-ie wypisywać po przecinku co ma być różne od zmiennej, musisz użyć operatora logicznego. Przykładowe rozwiązanie to:

if (choice!=1 && choice!=2 && choice!= 3 && choice!=4 && choice!=5) cout<<"error";

Jak widzisz użyłem tu Iloczynu logicznego do połączenia warunków.
Co do sprawdzenia największego wyniku proponuje funkcje max, możesz wykorzystać gotową, lub też napisać własną:
http://www.cplusplus.com/reference/algorithm/max/
Musiałbyś zrobić pętle i do zmiennej max przypisać wartość zmiennej np: "hc" a później sprawdzać czy jest większa od następnej np: "dt", jeśli tak to przypisać do max a jak nie do dalej niech się wykonuje pętla i sprawdzasz po kolei.

komentarz 28 marca 2017 przez seniu92 Nowicjusz (120 p.)

Uzylem tej lini w mojej petli i dziala ale tylko w przypadku gdy wpisze jakas liczbe wieksza niz 5. Natomiast gdy wpisze jakas kombinacje liter, dzieje sie to samo, czyli petla zaczyna pojawiac sie caly czas kilka razy na sekunde, w nieskonczonosc. Co do maxa, dzieki za podpowiedz, cos pokombinuje wink

0 głosów
odpowiedź 28 marca 2017 przez Piter10p Bywalec (2,750 p.)
Poważnie? Na studia? Co ty tam zaliczasz?

1) Podziel kod na więcej funkcji bo jest brzydki.

2) Nie nazywaj zmiennych "hc", "dt" itd. Zamiast tego "donaldTrumpVotes" na przykład. Nie wiadomo po co one istnieją w pierwszych chwilach a powinno się wiedzieć już na początku, po ich nazwie.

if (choice!=1,2,3,4) cout<<"error";

Zamiast tego napisz:

if (choice < 1 || choice > 4) cout<<"error";

 

I nie pakuj cin'a od razu do inta. Najpierw wprowadź mechanizm który będzie kontrolował czy wprowadzone dane to na pewno liczba bo ci się kod może posypać.

Podobne pytania

0 głosów
1 odpowiedź 445 wizyt
0 głosów
1 odpowiedź 109 wizyt
pytanie zadane 20 października 2018 w C i C++ przez periedynek Obywatel (1,320 p.)
0 głosów
1 odpowiedź 122 wizyt
pytanie zadane 9 sierpnia 2019 w C i C++ przez Pawel1452 Początkujący (380 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...