• 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
54 wizyt
pytanie zadane 9 lutego w C i C++ przez Sandra.S Nowicjusz (200 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,060 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 (200 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,060 p.)

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

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

 

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

Podobne pytania

0 głosów
1 odpowiedź 74 wizyt
pytanie zadane 5 stycznia w C i C++ przez Marcin Rutkowski Nowicjusz (140 p.)
0 głosów
1 odpowiedź 67 wizyt
pytanie zadane 6 lutego w C i C++ przez Thanat0s666 Nowicjusz (230 p.)
0 głosów
1 odpowiedź 564 wizyt
pytanie zadane 24 listopada 2017 w C i C++ przez applepie Początkujący (250 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

60,244 zapytań

105,928 odpowiedzi

220,065 komentarzy

32,445 pasjonatów

Przeglądających: 163
Pasjonatów: 3 Gości: 160

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.

...