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

0 głosów
69 wizyt
pytanie zadane 9 lutego w C i C++ przez Sandra.S Nowicjusz (220 p.)
edycja 10 lutego 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 przez Perseusz Bywalec (2,230 p.)
edycja 10 lutego 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 przez Sandra.S Nowicjusz (220 p.)
Działa, wielkie dzięki;) Ale mimo wszystko równiez chciałabym wiedziec jak tego użyc w petli while;)
komentarz 9 lutego przez Perseusz Bywalec (2,230 p.)

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

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

 

komentarz 9 lutego przez Sandra.S Nowicjusz (220 p.)
dzieki juz wszystko rozumiem;)

Podobne pytania

0 głosów
2 odpowiedzi 56 wizyt
pytanie zadane 10 kwietnia w C i C++ przez cyrus33 Początkujący (450 p.)
0 głosów
1 odpowiedź 77 wizyt
pytanie zadane 5 stycznia w C i C++ przez Marcin Rutkowski Nowicjusz (140 p.)
0 głosów
1 odpowiedź 75 wizyt
pytanie zadane 6 lutego w C i C++ przez Thanat0s666 Nowicjusz (230 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

63,177 zapytań

109,411 odpowiedzi

228,567 komentarzy

42,799 pasjonatów

Przeglądających: 203
Pasjonatów: 11 Gości: 192

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...