• 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

Object Storage Arubacloud
0 głosów
865 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,190 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 (155,460 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 (194,920 p.)

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

komentarz 16 września 2018 przez mokrowski Mędrzec (155,460 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ź 937 wizyt
pytanie zadane 28 października 2017 w PHP przez smokolisz Mądrala (6,340 p.)
0 głosów
1 odpowiedź 311 wizyt
pytanie zadane 19 stycznia 2018 w C i C++ przez foruminfa Początkujący (310 p.)
0 głosów
1 odpowiedź 453 wizyt
pytanie zadane 2 czerwca 2017 w C i C++ przez AndekQR Użytkownik (880 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...