Problem z vektorem

0

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

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

1

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

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

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

#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;
}
0

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

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?

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.

0
#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;
}
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

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

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:

char ch;
cin>>ch;

Jednak w bibliotece owa funkcja prezentuje się tak:

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

Dzięki wszystkim za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0