prosty kod, getline

prosty kod, getline
EM
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 lat
  • Postów:17
0

Hej mam problem z dość łatwym wydawałoby sie kodem.

Kopiuj
biblioteki iostream, string, fstream
fstream plik; string linia; 
 plik.open("dane.txt", ios::in);
    while(getline(plik,linia))
    {
        cout<<linia<<endl;
    }
    for(int i=1; i<linia.size(); i++)
    {
        if(linia[i]==';') licznik++;
    }
    cout<<"srednikow w tym pliku jest: "<<licznik;
    plik.close();

w pliku jest bodajże, 9 średników a wyświetla okrągłe zero ;> Jakieś sugestie? Może być też błąd w moim myśleniu.
Pozdrawiam

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:31 minut
  • Postów:6690
2
Kopiuj
    while(getline(plik,linia))
    {
        cout<<linia<<endl;
        for(int i=0; i<linia.size(); i++)
        {
            if(linia[i]==';') licznik++;
        }
    }

Badałeś tylko jedną (ostatnią) linię, w dodatku od drugiego znaku, a nie pierwszego.


🕹️⌨️🖥️🖱️🎮
edytowany 3x, ostatnio: Spine
VI
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:13
1

Ja bym wrzucił pętle for do pętli while. Zauważ że sprawdzasz liczbę średników tylko z ostatniej lini.

Tak jak post wyżej, dokładnie to miałem na myśli.

edytowany 1x, ostatnio: Vitling
carlosmay
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Pabianice
2
Kopiuj
 while(getline(plik,linia)) // odczytujesz i wypisujesz wszystkie linie 
    {
        cout<<linia<<endl;
    } // tutaj zmienna `linia` zawiera ostatni wczytany wiersz, bo co pętla jest nadpisywany
    for(int i=1; i<linia.size(); i++) // tutaj sprawdzasz tylko ostatnią linię. przenieś to pętli while i tam szukaj wystąpień średnika
    {
        if(linia[i]==';') licznik++;
    }

Do szukania znaku korzystaj z gotowych funkcji std::string, tj. find np.


edytowany 1x, ostatnio: carlosmay
Sparrow-hawk
  • Rejestracja:prawie 13 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Katowice
  • Postów:189
1

Dlaczego liczysz średniki, kiedy już skończyłeś czytać plik?

Kopiuj
fstream plik; string linia; 
plik.open("dane.txt", ios::in);

int licznik = 0;
while(getline(plik,linia)) {
   cout<<linia<<endl;
   for(int i=0; i<linia.size(); ++i) {
     if(linia[i]==';') 
       licznik++;
    }
  }
  cout<<"srednikow w tym pliku jest: "<<licznik;
  plik.close();
edytowany 2x, ostatnio: Sparrow-hawk
EM
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 lat
  • Postów:17
0

Faktycznie.
Dziękuje za pomoc :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.