• 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?

Object Storage Arubacloud
0 głosów
909 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,692 wizyt
pytanie zadane 10 kwietnia 2019 w C i C++ przez cyrus33 Użytkownik (680 p.)
0 głosów
1 odpowiedź 275 wizyt
pytanie zadane 5 stycznia 2019 w C i C++ przez Marcin Rutkowski Nowicjusz (140 p.)
0 głosów
1 odpowiedź 233 wizyt
pytanie zadane 6 lutego 2019 w C i C++ przez Thanat0s666 Nowicjusz (230 p.)

92,555 zapytań

141,402 odpowiedzi

319,541 komentarzy

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

...