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

Poruszanie się po pliku w trybie do odczytu | Odczyt co 3 znaku

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,023 wizyt
pytanie zadane 16 września 2018 w C i C++ przez Archeon Początkujący (480 p.)

Witam,

Polecenie do mojego zadania:

  • Napisz program, który odczytuje co trzeci znak z pliku. Użyj do tego metod poznanych w niniejszym rozdziale. Przetestuj poprawność działania programu na bardzo krótkim pliku tekstowym, wypisując co trzeci odczytany znak na ekranie.

Napisałem taki kod.. ale coś jest nie tak. Ktoś potrafi pomóc ?

Próbowałem też kombinować z eof ale niestety nie wyszło.

Ten program wypisuje tylko 3 pierwsze znaki, a mi zależy żeby wypisywał co 3 znak od początku do końca pliku tekstowego.

 

#include <iostream>
#include <string>
#include <fstream>
using namespace std;


/* run this program using the console pauser or add your own getch, system("pause") or input loop */

bool odczytajPlik(string nazwa_pliku)
{
	fstream plik;
	char znak;
	plik.open( nazwa_pliku.c_str() );
	if( !plik.good() )
	{
		cout << "Nie udalo sie otworzyc pliku .. " << endl;
		return false;
	}
	cout << "Co 3 znak z dokumentu tekstowego to: " ;
	while(plik.get(znak))
	{
		cout << znak;
		plik.seekg(3, ios::cur );
	}
	plik.close();
	return true;
} // koniec bool






	



int main(int argc, char** argv) {
	
	
odczytajPlik("znaki.txt");	
	
	return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 16 września 2018 przez Piotr Płatos Bywalec (2,380 p.)

Wystarczy tak zmodyfikować pętle while:

    int counter=0;
    while(plik.get(znak))
    {
        if(counter++%3==0)
            cout << znak;
    }

 

komentarz 16 września 2018 przez Archeon Początkujący (480 p.)
"Użyj do tego metod poznanych w niniejszym rozdziale."

te metody to :

plik.seekg( );

std::ios::beg

std::ios::cur

std::ios::end

plik.tellg();
0 głosów
odpowiedź 16 września 2018 przez Piotr Batko Stary wyjadacz (13,210 p.)

W prawdzie pokazuje co czwarty znak, zamiast co trzeciego, ale tak poza tym, to jest nieźle :) W pliku tekstowym mam: "0123456789ABCDEF".

0 głosów
odpowiedź 16 września 2018 przez mokrowski Mędrzec (158,660 p.)

Jeśli przeczytasz znak, i chcesz mieć "co trzeci", następny będzie "o dwa znaki dalej":

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

using namespace std;
 
bool odczytajPlik(string nazwa_pliku)
{
    fstream plik(nazwa_pliku);
    char znak;
    if (!plik)
    {
        cerr << "Nie udalo sie otworzyc pliku ..\n";
        return false;
    }
    cout << "Co 3 znak z dokumentu tekstowego to: " ;
    while (plik >> znak)
    {
        cout << znak;
        plik.seekg(2, ios::cur );
    }
    return true;
} 
 
int main() {
    odczytajPlik("znaki.txt");  
    std::cout << '\n';
    return 0;
}

Poza tym nie ma dużego sensu otwieranie pliku przez .open() kiedy konstruktor potrafi to zrobić ani jego zamykanie jeśli robi to poprawnie destruktor.

Błędy raczej drukuj na std:cerr.

komentarz 16 września 2018 przez j23 Mędrzec (195,240 p.)

Z tym seekg bym uważał, w Windowsie \n to \r\n.

komentarz 16 września 2018 przez mokrowski Mędrzec (158,660 p.)

Jasne. Ogólnie to mieszanie 2 różnych sposobów dostępu do strumienia i temat jest śliski. O wiele lepiej było by:

while (std:cin >> a >> b >> c) {
    std::cout << a;
}

Oraz ew. ignorowanie specjalnego znaczenia spacji/entera na strumieniu.

Z drugiej strony, znak to znak. A że MS decyduje się na nową linię zrobioną z 2 znaków, no to są 2 znaki :) Poza tym "kazali".. :)

Podobne pytania

0 głosów
1 odpowiedź 1,129 wizyt
pytanie zadane 28 października 2017 w PHP przez smokolisz Mądrala (6,340 p.)
0 głosów
1 odpowiedź 393 wizyt
pytanie zadane 19 stycznia 2018 w C i C++ przez foruminfa Początkujący (310 p.)
0 głosów
1 odpowiedź 910 wizyt
pytanie zadane 2 czerwca 2017 w C i C++ przez AndekQR Użytkownik (880 p.)

93,430 zapytań

142,427 odpowiedzi

322,652 komentarzy

62,794 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

...