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

Wczytywanie niezdefiniowanej liczby intow po spacjach

Object Storage Arubacloud
0 głosów
1,232 wizyt
pytanie zadane 15 listopada 2016 w C i C++ przez Knayder Nałogowiec (37,640 p.)
edycja 15 listopada 2016 przez Knayder

Witam na potrzeby pewnego zadania (Nie istotne jakiego) muszę wczytać niezdefiniowaną liczbę intów po spacjach.
Przykładowe wejście:
20 37 60 122 39 40

Wiem że mógłbym to "przechwycić" jako string i wyodrębnić liczby. Ale mi chodzi o bezpośrednie wczytywanie od razu do tablicy/wektora.
 

std::vector<int> liczby;
int liczba;
while(cin>>liczba)
    liczby.push_back(liczba);

Coś takiego prawie zdaje egzamin. Problem w tym, że jako iż jest to pętla, to ponownie chcesz coś wczytać, a ja bym chciał żeby poleciał dalej :\
Wie ktoś może jak coś takiego zrobić ?
Pozdrawiam :)

3 odpowiedzi

0 głosów
odpowiedź 15 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
 
Najlepsza

Dobra, udało mi się znaleźć odpowiedź :)
By osiągnąć to co chciałem należy (Przynajmniej według mojego sposobu):
 

int liczba;
streambuf *p;
p = cin.rdbuf();

Utworzyć jakiegoś inta, po czym zrobić wskaźnik na obiekt klasy streambuf oraz wskazać go na buffer cina który otrzymujemy funkcją cin.rdbuf()

vector<int> liczby;
do 
{
	cin >> liczba;
	liczby.push_back(liczba);
} while (p->in_avail()>1 );

Pętlę wczytującą zrobić tak jak powyżej

Po czym dodać
 

cin.ignore();

W celu wyczyszczenia bufora obiektu cin.

Cały kod:
 

int liczba;
streambuf *p;
p = cin.rdbuf();
cout << "avil: " << p->in_avail() << endl;
vector<int> liczby;
do 
{
	cin >> liczba;
	liczby.push_back(liczba);
	cout << p->in_avail() << endl;
} while (p->in_avail()>1 );
cin.ignore();
cout << "====" << endl;
cout << liczby.size();
	
cout << endl << "Liczby: \n";
for (int i = 0; i < liczby.size();i++)
	cout << liczby[i] << endl;
	
cout << "avil: " << p->in_avail() << endl;
	
system("pause");

Poprawny output wygląda mniej więcej tak :D
 

avil: 0
1 2 3 4 5
9
7
5
3
1
====
5
Liczby:
1
2
3
4
5
avil: 0
Press any key to continue . . .

Pozdrawiam :)
 

komentarz 15 listopada 2016 przez Evelek Nałogowiec (28,960 p.)

Inny sposób, który Ci pisałem przed chwilą to użycie tablicy ASCII i wykorzystanie tego, że Enter to 13. cheeky

komentarz 15 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
Nie jestem pewny czy to aby na pewno zadziała.
Po pierwsze enter zostałby wpisany do Wektor :?
Po drugie cin pomija znaki białe.
komentarz 15 listopada 2016 przez Evelek Nałogowiec (28,960 p.)
komentarz 15 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
aa widzisz, bo tam użyty jest getch() a nie cin.
cin nie zbiera znakó białych :D
+1 głos
odpowiedź 15 listopada 2016 przez Evelek Nałogowiec (28,960 p.)
while(liczba != 0)
{
   cin >> liczba;
   liczby.push_back(liczba);
}

Może coś takiego?

komentarz 15 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
To wymusza na nas wpisania 0 na końcu. Mi właśnie chodzi żeby nie trzeba było
komentarz 15 listopada 2016 przez Evelek Nałogowiec (28,960 p.)
A jak to ma wyglądać? Podajemy ciąg liczb jedna po drugiej oddzielonych spacjami. I skąd program ma wiedzieć kiedy koniec? Wtedy kiedy zatwierdzimy to enterem?
komentarz 15 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
Tak
20->Spacja->31->Spacja->46->Enter
0 głosów
odpowiedź 15 listopada 2016 przez unknown Nałogowiec (39,560 p.)
CTRL+Z

Podobne pytania

0 głosów
1 odpowiedź 249 wizyt
pytanie zadane 6 stycznia 2019 w C i C++ przez jankowa1ski Gaduła (3,560 p.)
0 głosów
1 odpowiedź 2,948 wizyt
0 głosów
3 odpowiedzi 372 wizyt
pytanie zadane 5 stycznia 2016 w C i C++ przez macik1423 Początkujący (480 p.)

92,563 zapytań

141,413 odpowiedzi

319,590 komentarzy

61,948 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!

...