Zliczanie ilości znaków w pliku, przekazywanie pliku do funkcji

Zliczanie ilości znaków w pliku, przekazywanie pliku do funkcji
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam, mam za zadanie napisać program w c++, który koduje i rozkodowuje plik ASCII do pbm i na odwrót, oczywiście nie chcę, żebyście go za mnie pisali, lecz mam kilka pytań:

Jak przekazać zmienną typu ifstream do funkcji? pisząc coś w stylu

Kopiuj
nazwa_funkcji (ifstream plik)

ale się wykrzacza.

Po drugie, jak zliczyć ilość znaków (łącznie z białymi) w pliku tekstowym?
wiem, że while, ale nie wiem, jaki dać warunek. Próbowałem

Kopiuj
while (!plik.eof())
n++;

ale liczy bez końca, myślałem, że po napotkaniu na koniec pliku skończy liczyć.

Sory za moją małą znajomość języka, dopiero zaczynam ;)

dodanie znaczników <code class="cpp"> - furious programming

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
void nazwa_funkcji(ifstream &plik)
Kopiuj
for(count=0;plik.get()!=EOF;++count) {}
  • Rejestracja: dni
  • Ostatnio: dni
0

mój przykładowy program, kompiluje się i liczy w nieskończoność (tzn do jakichś 4 mln) podczas, gdy plik ala zawiera tylko jedno zdanie.

Kopiuj
using namespace std;

int main ()
{
int n;
char ch;
ifstream plik ("C:\\Users\\Marcin\\Desktop\\ala");
for (int count=0; plik.get()!=EOF; ++count)
{n++;}

cout<<"Liczba znakow wynosi: "<<n << endl;

return 0;
}

dodanie znacznika <code class="cpp"> - furious programming

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
#include <fstream>
#include <iostream>
using namespace std;
 
int main ()
  {
   int count;
   ifstream fin("C:\\temp\\data.csv");
   for(count=0;fin.get()!=EOF;++count) {}
   cout<<"Liczba znakow wynosi: "<<count<<endl;
   return 0;
  }
  • Rejestracja: dni
  • Ostatnio: dni
0

Dziękuję ;)

  • Rejestracja: dni
  • Ostatnio: dni
0

Ale zadam jeszcze jedno pytanie.
Mam już ilość, więc próbowałem w for wczytać znaki, ale nie działa żaden z tych sposobów:

Kopiuj
char ch;

for (int i=1; i<=ilosc; i++)
{
    input.get(ch);
    cout<<ch<<endl;
}
Kopiuj
char ch;

while(!input.get())
{
    input>>ch;
    cout<<ch;
}
Kopiuj
char ch;

while(input>>ch)
{
    cout<<ch;
}
Kopiuj
char ch;

for (int i=0; i<ilosc; i++)
{
    ch=input.get();
    cout<<ch;
}

return 0;

Zwykle przeskakuje tylko do nowej linii po dodaniu cout<<ch<<endl ;/

dodanie znaczników <code class="cpp"> - furious programming

SM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Dobra już założyłem konto więc będę edytował posty.

Cały program to:

Kopiuj
//QRcode

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <conio.h>

using namespace std;

int main ()

{
	int ilosc;
	ifstream input("C:\\Users\\Marcin\\Desktop\\ala.txt");
	for (ilosc=0; input.get()!=EOF; ilosc++) {}
	cout<<"Liczba znakow wynosi: "<<ilosc<<endl;
	int ch;
	
// tutaj różne wersje, które są w poście wyżej:
    for (int i=0; i<ilosc; i++)
    {
    input>>ch;
    cout<<ch<<endl;
}


}

Nie wiem, co zrobić, zeby sobie wczytac po kolei każdy char.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Albo zamknąć plik i otworzyć jeszcze raz, albo przestawić na początek za pomocą input.seekg(0,ios::beg);

SM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Plik ala.txt zawiera zdanie:
Ala ma kota

Po wykonaniu programu:

Kopiuj
 //QRcode

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <conio.h>

using namespace std;

int main ()

{
	int ilosc;
	ifstream input("C:\\Users\\Marcin\\Desktop\\ala.txt");
	for (ilosc=0; input.get()!=EOF; ilosc++) {}
	cout<<"Liczba znakow wynosi: "<<ilosc<<endl;
	char ch;
	
	input.seekg(0,ios::beg);

    for (int i=0; i<ilosc; i++)
    {
    input>>ch;
    cout<<ch<<endl;
	}


}

Pokazuje

Kopiuj
Liczba znaków wynosi: 12








O dziwo, po zmianie z char ch; na int ch; w każdej z 12 linijek jest liczba 4233168

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Człowieku poczytaj dokumentacje, dochodzisz do końca pliku, dochodzi do ustawiania flagi ios::failbit więc trzeba wyczyścić.
input.clear();

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.