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

Wczytywanie danych do tablicy do póki w strumieniu są dane

Object Storage Arubacloud
0 głosów
817 wizyt
pytanie zadane 4 marca 2016 w C i C++ przez Janusz programowania Bywalec (2,710 p.)

 

Mam w zadaniu nieokreśloną ilość testów danych, które mają być wczytywane do tablic

​Próbowałem rozwiązać to w taki sposób


int a=0;
  while( (cin>>tablica1[a]) && (cin>>tablica2[a]) && (cin>>tablica3[a]) )
    {
        cout<<tablica1[a]<<tablica2[a]<<tablica[a];
        a++;
    }

Ale nie wczytuje to danych, a je pomija.

Pomożecie?

 

2 odpowiedzi

+1 głos
odpowiedź 4 marca 2016 przez mariush Dyskutant (7,860 p.)
wybrane 5 marca 2016 przez Janusz programowania
 
Najlepsza
// ...
int n;
vector<int> vec;
while(cin >> n)
{
    vec.push_back(n);
}
// ...

Program wczytuje dane do wektora, dopóki w strumieniu są dane i można je przekonwertować na typ int.

komentarz 4 marca 2016 przez Janusz programowania Bywalec (2,710 p.)

Napisałem coś takiego:

while (std::cin>>x)
{
//instrukcje
}

i po skończeniu się danych w strumieniu program nie przechodzi dalej, lecz czeka na kolejne.

komentarz 5 marca 2016 przez mariush Dyskutant (7,860 p.)

W takim razie musisz napisać warunek, który będzie sprawdzał czy jest koniec strumienia, lub pobierasz całą linię i rozdzielasz ją do tablicy.

// ...
#include <vector>
#include <sstream>
#include <iterator>
// ...
string s;
getline(cin, s);

istringstream iss(s);
vector<int> v{istream_iterator<int>{iss}, istream_iterator<int>{}};

for(int i=0; i<v.size(); ++i)
    cout << v[i] << endl;
//...

 

komentarz 5 marca 2016 przez Janusz programowania Bywalec (2,710 p.)

Niestety nie mam pojęcia jak za takie coś się zabraćfrown. Jak napisać warunek, który sprawdzałby czy jest koniec strumienia? Mógłbyś podać jakieś źródła które by mi pomogły, lub napisać taki kod który rozdziela te dane do trzech tablic? Dane ustawione są w taki sposób

string int int

będę niezmiernie wdzięczny za pomoc.

komentarz 5 marca 2016 przez mariush Dyskutant (7,860 p.)
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

int main()
{
    // Tworzymy 3 wektory: 1 na wyrazy, 2 na liczby całkowite
    vector<string> vecOfStr;
    vector<int> vecOfInt1;
    vector<int> vecOfInt2;

    // Pobieramy całą linię do zmiennej linia
    string linia;
    getline(cin, linia);

    // Tworzymy strumień z naszą linią
    istringstream iss(linia);

    // Pętla powtarza się dopóki w strumieniu są dane
    while(!iss.eof())
    {
        // Z każdym obrotem pętli wczytujemy napis, 2 liczby
        // i zapisujemy je do 3 różnych pojemników na dane

        string s;
        iss >> s;
        vecOfStr.push_back(s);

        int n;
        iss >> n;
        vecOfInt1.push_back(n);

        iss >> n;
        vecOfInt2.push_back(n);
    }

    // Wyświetlamy zawartość 3 wektorów

    cout << "\nZawartosc vecOfStr:";
    for(int i=0; i<vecOfStr.size(); ++i)
        cout << " " << vecOfStr[i];

    cout << "\nZawartosc vecOfInt1:";
    for(int i=0; i<vecOfInt1.size(); ++i)
        cout << " " << vecOfInt1[i];

    cout << "\nZawartosc vecOfInt2:";
    for(int i=0; i<vecOfInt2.size(); ++i)
        cout << " " << vecOfInt2[i];

    return 0;
}

 

komentarz 5 marca 2016 przez Janusz programowania Bywalec (2,710 p.)

Jestem bardzo, bardzo wdzięczny. Dziękuję smiley

+1 głos
odpowiedź 4 marca 2016 przez Aisekai Nałogowiec (42,190 p.)
Ja bym użył wektora. Pytanie też, w czym masz te dane? Najlepiej chyba się nadaje do nieokreślonej ilości danych.
komentarz 4 marca 2016 przez Janusz programowania Bywalec (2,710 p.)
edycja 4 marca 2016 przez Janusz programowania

getline pobiera cały wiersz, a nie wiem w jaki sposób później to rozdzielić.

Sposób który pokazałem w pierwszym poście działa mi, gdy w warunku jest jedna zmienna int frown

Dane umieściłem w dynamicznych tablicach. Pierwsza jest typu string, dwie pozostałe int. Wszystkie 3 mają w sobie po 25 miejsc.

Podobne pytania

0 głosów
1 odpowiedź 617 wizyt
0 głosów
2 odpowiedzi 484 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez Śwież4k Bywalec (2,570 p.)
0 głosów
1 odpowiedź 272 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez xLooks Początkujący (250 p.)

92,592 zapytań

141,441 odpowiedzi

319,702 komentarzy

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

...