• 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

VPS Starter Arubacloud
0 głosów
1,327 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ź 269 wizyt
pytanie zadane 6 stycznia 2019 w C i C++ przez jankowa1ski Gaduła (3,560 p.)
0 głosów
1 odpowiedź 3,108 wizyt
0 głosów
3 odpowiedzi 487 wizyt
pytanie zadane 5 stycznia 2016 w C i C++ przez macik1423 Początkujący (480 p.)

92,973 zapytań

141,938 odpowiedzi

321,180 komentarzy

62,301 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...