• 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

Cloud VPS
0 głosów
1,145 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ź 879 wizyt
0 głosów
2 odpowiedzi 822 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez Śwież4k Bywalec (2,570 p.)
0 głosów
1 odpowiedź 471 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez xLooks Początkujący (250 p.)

93,456 zapytań

142,451 odpowiedzi

322,721 komentarzy

62,837 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

Kursy INF.02 i INF.03
...