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

getline(); - jak dokładnie działa? jak pobierac kolejne linie tekstu w petli?

VPS Starter Arubacloud
0 głosów
903 wizyt
pytanie zadane 9 lutego 2019 w C i C++ przez Sandra.S Początkujący (300 p.)
edycja 10 lutego 2019 przez criss

Witam, mam problem z funkcją getline().

Utworzyłam na próbę plik trasa.txt, w którym jest 5 linii zawartości:


To sa dostepne trasy:
To jest trasa 1
To jest trasa 2
To jest trasa 3
To jest trasa 4
To jest trasa 5
To jest trasa 6
Dokonaj wyboru:

 

Chciałabym je wczytac z pliku i wyswietlić na ekranie.

Jednak mój kod nie działa i wyswietla się tylko 8 linia tekstu po czym program się konczy.
Pomoże ktos??

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>


using namespace std;
int main()
{
    fstream trasa;
    trasa.open("trasa.txt", ios::in);


    if (!trasa.good())
    {
        cout<<"Nie znaleziono pliku.";
        exit(0);
    }

    string opis, wybor;
    string trasy[6];
    string linia;

    int  i=0;
        while (getline(trasa, linia))
        {
            if (i=0)                   //pierwszy obieg    i=0, linia 1 zapisze się do zmiennej opis,
                opis = linia;

            else if (i=7)              //ósmy obieg        i=7, linia 8 zapisze się do zmiennej wybor,
                wybor = linia;
            else
                trasy[i-1] = linia;    // drugi obieg       i=1, do trasy[0] zapisze sie linia 2,
            i++;                       // trzeci obieg      i=2, do trasy[1] zapisze sie linia 3,
                                       // czwarty obieg     i=3, do trasy[2] zapisze sie linia 4,
                                       // piaty obieg       i=4, do trasy[3] zapisze sie linia 5,
                                       // szósty obieg      i=5, do trasy[4] zapisze sie linia 6,
                                       // siódmy obieg      i=6, do trasy[5] zapisze sie linia 7,
        }
    trasa.close();

    cout<<opis<<endl;
    for (int i=0; i<6; i++)
    {
        cout<<trasy[i]<<endl;
    }
    cout<<wybor;

    return 0;
}

Użyłam petli while (getline(trasa,linia)), i juz nawet rozpisałam sobie w komentarzach , w ktorym obiegu ma się ktora linia wczytac, ale i tak nie wczytuje się.

1 odpowiedź

+1 głos
odpowiedź 9 lutego 2019 przez Perseusz Bywalec (2,190 p.)
edycja 10 lutego 2019 przez criss

Użyłaś operatora przypisania „=” zamiast porównania „==” w linii 27 i 30. Wykonuje się drugi warunek, ponieważ w pierwszym przypisujesz 0 równe false - warunek jest niespełniony.

 

Tak na marginesie to zamiast while można było użyć for.

 

Tutaj kod bez warunków w czytaniu pliku:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
 
 
using namespace std;
int main()
{
    fstream trasa;
    trasa.open("trasa.txt", ios::in);
 
 
    if (!trasa.good())
    {
        cout<<"Nie znaleziono pliku.";
        exit(0);
    }
 
    string opis, wybor;
    string trasy[6];


    getline( trasa, opis );

    for ( int i = 0; i < 6; i++ )
    {
         getline( trasa, trasy[i] );
    }

    getline( trasa, wybor);


    trasa.close();
 
    cout << opis << endl;

    for ( int i = 0; i < 6;  i++ )
    {
        cout << trasy[i] << endl;
    }

    cout << wybor;
 
    return 0;
}

Czy działa to nwm, bo nie bawię się c++ ale nie widzę powodu żeby nie ;)

komentarz 9 lutego 2019 przez Sandra.S Początkujący (300 p.)
Działa, wielkie dzięki;) Ale mimo wszystko równiez chciałabym wiedziec jak tego użyc w petli while;)
komentarz 9 lutego 2019 przez Perseusz Bywalec (2,190 p.)

To już chyba wiesz, wystarczy dopisać „=” gdzieniegdzie

if( i == 0 )
if( i == 7 )

 

komentarz 9 lutego 2019 przez Sandra.S Początkujący (300 p.)
dzieki juz wszystko rozumiem;)

Podobne pytania

0 głosów
2 odpowiedzi 1,654 wizyt
pytanie zadane 10 kwietnia 2019 w C i C++ przez cyrus33 Użytkownik (680 p.)
0 głosów
1 odpowiedź 233 wizyt
pytanie zadane 5 stycznia 2019 w C i C++ przez Marcin Rutkowski Nowicjusz (140 p.)
0 głosów
1 odpowiedź 231 wizyt
pytanie zadane 6 lutego 2019 w C i C++ przez Thanat0s666 Nowicjusz (230 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...