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

Wprowadzanie nieokreślonej ilości liczb do vectora

Object Storage Arubacloud
+1 głos
453 wizyt
pytanie zadane 15 lutego 2016 w C i C++ przez easytodo Mądrala (5,380 p.)

Witam, zaczynam pracę z wektorami i chciałbym wprowadzać nieznaną ilość elementów do tablicy w taki sposób:

void wprowadz(vector <int> &tab)
{
    int liczba;
    system("CLS");
    tab.clear();
    cout<<"Wprowadzaj liczby (CTRL+Z konczy wprowadzanie)"<<endl;

    while (cin>>liczba)
        tab.push_back(liczba);
}

Ale gdy używam 'ctrl+z' to program głupieje i bardzo szybko przełącza się pomiędzy MENU głównym w main() a napisem w podanym voidzie i nic nie można zrobić. Ktoś wie jak to naprawić?

Wywołanie w main()

case '1': wprowadz(tablica); break;

 

3 odpowiedzi

+2 głosów
odpowiedź 15 lutego 2016 przez adrian17 Ekspert (344,860 p.)
wybrane 15 lutego 2016 przez easytodo
 
Najlepsza
Kod jest jak najbardziej poprawny. Jeśli jesteś na Linuxie, spróbuj ctrl+d zamiast ctrl+z. Spróbuj też wywołać cin.clear() po zakończeniu pętli.
komentarz 15 lutego 2016 przez easytodo Mądrala (5,380 p.)
cin.clear() załatwiło sprawę. Dzięki wielkie!
+1 głos
odpowiedź 15 lutego 2016 przez mariush Dyskutant (7,860 p.)

Spróbuj:

while (cin>>liczba) {
    if(cin.eof())
        break;
    tab.push_back(liczba);
}

 

komentarz 15 lutego 2016 przez easytodo Mądrala (5,380 p.)
Niestety to samo :/
0 głosów
odpowiedź 15 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)

Pokaż więcej kodu - czyżby twoim sprawdzaniem, czy naciśnięto CTRL + Z, jest while(cin >> liczba)? Przecież to nie ma sensu...

komentarz 15 lutego 2016 przez notabigthreat Mądrala (7,060 p.)
+1 za „Pokaż więcej kodu”
komentarz 15 lutego 2016 przez easytodo Mądrala (5,380 p.)

Próbowałem to robić tak jak na SPOJu, zawsze jak deklarowałem tablicę (powiedzmy 1000 intów) i wprowadzałem 10 po czym wprowadzałem ctrl+Z to wprowadzanie się kończyło i żadnych błędów nie miałem. 

Tutaj kod z przykladowym dzialajacym wprowadzaniem, ale nie chcę takiego warunku zakończenia, bo ktoś mógłby chcieć wprowadzić -1 i co wtedy :)

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>

using namespace std;

void wyswietl(vector <int> &tab)
{
    for (unsigned i=0;i<tab.size();i++)
        cout<<tab[i]<<" ";
    cout<<endl;
    system("PAUSE");
}

void wprowadz(vector <int> &tab)
{
    int liczba;
    system("CLS");
    tab.clear();
    cout<<"Wprowadzaj liczby (-1 konczy wprowadzanie)"<<endl;

    while (cin>>liczba)
        {
            if (liczba == -1) break;
            tab.push_back(liczba);
        }
}

void sortuj(vector <int> &tab)
{
    int Od,Do;
    char w;
    system("CLS");
    cout<<"Wybierz sposob sortowania\n";
    cout<<"1. Cala tablica\n";
    cout<<"2. Od ... do\n";
    cout<<"Wybor: ";
    cin>>w;

    switch (w)
    {
        case '1': sort(tab.begin(),tab.end()); break;
        case '2': system("CLS");
                    cout<<"Od ktorego elementu sortowac: "; cin>>Od;
                    cout<<"Do ktorego elemtu sortowac: "; cin>>Do;
                    sort (tab.begin()+Od-1, tab.begin()+Do);
                    break;
    }
}

int main()
{
    vector <int> tablica;
    char w;
    do
    {
        system("CLS");
        cout<<"1. Wprowadz liczby\n";
        cout<<"2. Posortuj\n";
        cout<<"3. Wyswietl\n";
        cout<<"0. KONIEC\n";
        cout<<"Wybor: ";
        cin>>w;

        switch (w)
        {
            case '1': wprowadz(tablica); break;
            case '2': sortuj(tablica); break;
            case '3': wyswietl(tablica); break;
        }

    } while (w != '0');
    return 0;
}

 

komentarz 15 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)

Niestety, ale najprawdopodobniej nie da się zrobić takiego mechanizmu za pomocą std::cin. Może poproś użytkownika, aby wpisał literę zamiast liczby albo wprowadził informację, ile liczb chce wprowadzić.

Podobne pytania

0 głosów
2 odpowiedzi 1,244 wizyt
+1 głos
2 odpowiedzi 456 wizyt
pytanie zadane 12 czerwca 2020 w PHP przez Martita Bywalec (2,470 p.)
+1 głos
2 odpowiedzi 97 wizyt
pytanie zadane 23 sierpnia 2023 w C i C++ przez Janchess Początkujący (480 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...