Problem z vektorem

  • Rejestracja: dni
  • Ostatnio: dni
0

Moze mi ktos powiedziec co jest zlego z tym kodem ze nie dziala? Bo ja jakos nie moge sie doszukac...

Kopiuj
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

void main() {
    vector<int> v(0,0);
    int temp;
    int i = 0;
    while(cin>>temp){
         v.push_back(temp);
         ++i;
         if (i >= 5) {
               for (int i2 = 0; i < v.size(); ++i2)
                     cout << v[i2];
         }
    }
}

Kiedy i2 dochodzi do 5, program nie wyswietla wszystkich wartosci vektora. Moga znalezc sie bledy pisowni bo kod mialem na innym komputerze bez internetu wiec na szybko przepisalem.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

Jak nie zaczniesz nazywać zmiennych jak człowiek to tak będzie...

Kopiuj
for (int i2 = 0; i < v.size(); ++i2)

Konkretnie:
i < v.size();
ten warunek na pewno spełniony nie będzie...

Kopiuj
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> v;
    int temp;
    int n = 0;
    while(cin>>temp)
    {
        v.push_back(temp);
        n++;
        if (n >= 5)
        {
            for (unsigned int i = 0; i < v.size(); i++)
                cout << v[i];
        }
    }
    return 0;
}
MM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 65
0

Okej, to co napisałeś pomogło jednak mam jeszcze jedno małe pytanko. W książce napisane jest że pętla

Kopiuj
while(cin>>temp)

jest wykonywana dopóki wczytywanie zakończy się błędem(w tym przypadku np. poprzez wpisanie literki zamiast liczby). Jeśli napisałem coś po pętli
i celowo ją przerwałem wpisując literkę to dlaczego program wyłącza się zamiast przechodzić do poleceń po pętli?

byku_guzio
  • Rejestracja: dni
  • Ostatnio: dni
0

Przechodzi do poleceń po pętli, ale strumień dalej tkwi w stanie błędu. Do czasu aż usuniesz mu flagę błędu(metoda clear). Pokaż kod to się wyjaśni.

MM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 65
0
Kopiuj
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>

using namespace std;

void main() {
	double odleglosc;
	vector<double> v(0,0);
	while(cin>>odleglosc)
		v.push_back(odleglosc);
	sort(v.begin(), v.end());
	double suma = 0.0;
	for(unsigned int i = 0; i < v.size();i++)
		suma += v[i];
	cout << "Suma to: " << suma << "\nNajmniejsza odleglosc to: " << v[0] << "\nNajwieksza odleglosc to: " << v[v.size() -1];
	cout << "\n Srednia droga to: " << suma/v.size();
	char ch;
	cin >> ch;
}
byku_guzio
  • Rejestracja: dni
  • Ostatnio: dni
0

Zakładam, że odpalasz to w jakimś DevC++, który nie zatrzymuje konsoli...

  1. NIE void main()... ale int main i na końcu dobrze jest dać (ale nie potrzeba - jest dodawane domyślnie) return 0;
  2. wszystko się wykonuje tak jak ma, tyle, że cin >> ch; nie czeka na znak, ponieważ strumień jest w stanie błędu. Zaraz za pętlą daj cin.clear(); cin.sync(); cin.sync() wyczyści strumień z nieprzeczytanych znaków, a clear() zdejmie flagi błędów
MM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 65
0

Heh dzięki wielkie wszystko pięknie działa. Nie rozumiem jak autor książki może ode mnie oczekiwać takich rzeczy skoro nic o tym nie wspomniał(nie doszedłem nawet do funkcji...)

MM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 65
0

Okej już wszystko jasne. Autor napisał własną bibliotekę którą rekomendował używać przez pierwsze kilka rozdziałów. Zdefiniował tam funkcję którą w książce opisał tak:

Kopiuj
char ch;
cin>>ch;

Jednak w bibliotece owa funkcja prezentuje się tak:

Kopiuj
	cin.clear();//tu jest
	cout << "Please enter a character to exit\n";
	char ch;
	cin >> ch;
	return;

Dzięki wszystkim za pomoc!

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.