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

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

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

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

0
void nazwa_funkcji(ifstream &plik)
for(count=0;plik.get()!=EOF;++count) {}
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.

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

0
#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;
  }
0

Dziękuję ;)

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:

char ch;

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

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

while(input>>ch)
{
    cout<<ch;
}
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

0

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

Cały program to:

//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.

1

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

0

Plik ala.txt zawiera zdanie:
Ala ma kota

Po wykonaniu programu:

 //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

Liczba znaków wynosi: 12








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

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1