Zliczanie ankiety

0

Witam mam program który działa i jest taki jaki ma być w zadaniu, tylko nie wiem czemu gdy do "Podaj pytanie do ankiety:" wpisze fraze ze spacją to automatycznie wyświetla mi pierwsze i drugie pytanie z trzecim w linii i mogę podać tylko trzecie?

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string pytanie;

    int x=0 ;
    int y=0 ;
    int z=0 ;
    int odpowiedz;

    string pierwsza;
    string druga;
    string trzecia;

    cout << "Podaj pytanie do ankiety:" ;
    cin >> pytanie;
    cout << "Podaj pierwsza odpowiedz:" ;
    cin >> pierwsza;
    cout << "Podaj druga odpowiedz:" ;
    cin >> druga;
    cout << "Podaj trzecia odpowiedz:" ;
    cin >> trzecia;

    do
    {
        cout << "Wybierz odpowiedz: "<< endl << "1\t" << pierwsza << endl << "2\t" << druga<< endl << "3\t" << trzecia << endl << "Jesli to koniec wprowadz 0" << endl;
        cin >> odpowiedz;

        if (odpowiedz==1)
        {
            x++;
        }

        else if (odpowiedz==2)
        {
            y++;
        }

        else if (odpowiedz==3)
        {
            z++;
        }

        else if (odpowiedz!=0 || odpowiedz!=1 || odpowiedz!=2 || odpowiedz!=3)
        {
            cout << "odpowiedz nieznana" << endl << endl;
        }

    }while (odpowiedz!=0);

    cout << "wyniki ankiety:" << endl << "odpowiedz 1)\t" << x << '\t' << "odpowiedz 2)\t" << y << '\t' << "odpowiedz 3)\t" << z << '\t';
}
4

Jak chcesz wczytać całą linię to użyj getline zamiast cin

Na przyszłość poprawnie nazywaj temat, taguj oraz umieszczaj kod w znacznikach do kolorowania składni.

2

Już otrzymywałeś odpowiedź na to pytanie przy innym wątku, czy sądzisz że coś się zmieniło w języku w międzyczasię?

#include <iomanip> // for ws
...
    cout << "Podaj pytanie do ankiety:" ;
    cin >> pytanie;
    cout << "Podaj pierwsza odpowiedz:" ;
    cin >> ws >> pierwsza;
    cout << "Podaj druga odpowiedz:" ;
    cin >> ws >> druga;
    cout << "Podaj trzecia odpowiedz:" ;
    cin >> ws >> trzecia;

Poza tym to rozwiązanie jest totalnie bez sensu, wyobraź sobie że dostaniesz zadanie przerobić to z drobną zmianą zamiast 3-ch pytań ma być 1000.
I co leżysz kwiczysz?
Zrób to tak aby zmiana z 3-ch na 1000 wymagała zmiany wyłącznie jednej liczby w jednym miejscu.

Wersja z ustaloną ilością pytań (pisano bez kompilatora):

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

const unsigned count=3;

int main()
{
	stringstream ss; // można dokładać do prompt za pomocą +=
	ss<<"Wybierz odpowiedz:"<<endl;
	cout<<"Podaj pytanie do ankiety:" ;
	cin>>question;
	for(unsigned i=1;i<=count;++i)
	{
		cout<<"Podaj odpowiedz nr "<<i<<": ";
		string answer;
		cin>>ws>>answer;
		ss<<i<<'\t'<<answer<<endl;
	}
	unsigned answers[count]={0}; // warto użyć wiektora
	ss<<"0\tKoniec"<<endl<<"Wybierz: ";
	for(string prompt(ss.str());;cout<<endl)
	{
		cout<<prompt;
		unsigned value;
		cin>>value;
		if((1<=value)&&(value<=count)) ++answers[value-1];
		else if(value) cout<<"niepoprawna odpowiedz"<<endl;
		else break;
	}
	cout<<endl<<"Wyniki ankiety:"<<endl;
	for(unsigned i=1;i<=count;++i)
	{
		cout<<"odpowiedz "<<i<<": "<<answers[value-1]<<endl;
	}
	return 0;
}
0
_13th_Dragon napisał(a):

Już otrzymywałeś odpowiedź na to pytanie przy innym wątku, czy sądzisz że coś się zmieniło w języku w międzyczasię?

#include <iomanip> // for ws
...
    cout << "Podaj pytanie do ankiety:" ;
    cin >> pytanie;
    cout << "Podaj pierwsza odpowiedz:" ;
    cin >> ws >> pierwsza;
    cout << "Podaj druga odpowiedz:" ;
    cin >> ws >> druga;
    cout << "Podaj trzecia odpowiedz:" ;
    cin >> ws >> trzecia;

Poza tym to rozwiązanie jest totalnie bez sensu, wyobraź sobie że dostaniesz zadanie przerobić to z drobną zmianą zamiast 3-ch pytań ma być 1000.
I co leżysz kwiczysz?
Zrób to tak aby zmiana z 3-ch na 1000 wymagała zmiany wyłącznie jednej liczby w jednym miejscu.

Wersja z ustaloną ilością pytań (pisano bez kompilatora):

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

const unsigned count=3;

int main()
{
	stringstream ss; // można dokładać do prompt za pomocą +=
	ss<<"Wybierz odpowiedz:"<<endl;
	cout<<"Podaj pytanie do ankiety:" ;
	cin>>question;
	for(unsigned i=1;i<=count;++i)
	{
		cout<<"Podaj odpowiedz nr "<<i<<": ";
		string answer;
		cin>>ws>>answer;
		ss<<i<<'\t'<<answer<<endl;
	}
	unsigned answers[count]={0}; // warto użyć wiektora
	ss<<"0\tKoniec"<<endl<<"Wybierz: ";
	for(string prompt(ss.str());;cout<<endl)
	{
		cout<<prompt;
		unsigned value;
		cin>>value;
		if((1<=value)&&(value<=count)) ++answers[value-1];
		else if(value) cout<<"niepoprawna odpowiedz"<<endl;
		else break;
	}
	cout<<endl<<"Wyniki ankiety:"<<endl;
	for(unsigned i=1;i<=count;++i)
	{
		cout<<"odpowiedz "<<i<<": "<<answers[value-1]<<endl;
	}
	return 0;
}

Dziękuje za poświęcony czas ten program który napisałeś jest jeszcze dla mnie za skomplikowany. Na razie bazuje na zmiennych łatwych pętlach i porównaniach.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.