Witam, mam za zadanie napisać program który zliczy ilość znaków (przecinki/kropki) w pliku.
#include <windows.h>
#include <process.h>
#include <iostream>
#include <fstream>
using namespace std;
unsigned _stdcall FunkcjaWatku(void * arg)
{
fstream plik;
char c;
plik.open("plik.txt", ios::in );
if(plik.good() == true)
{
ifstream in("plik.txt");
int b=0;
{
while (!plik.eof() )
{
c=plik.get();
if (c==',') b++;
}
cout<<b;
plik.close();
}
_endthreadex(0);
return 0;
}
};
int main()
{
unsigned IdentWatku[1];
HANDLE hWatki [1];
char w1[] = "Pierwszy watek";
hWatki[0] = (HANDLE)_beginthreadex (NULL, 0,&FunkcjaWatku, (void*)w1, 0, &IdentWatku[0]);
WaitForMultipleObjects(1, hWatki, TRUE, INFINITE);
CloseHandle (hWatki [0]);
return 0;
}
Program w tej postaci działa ale nie ma sensu. Chciałem utworzyć trzy wątki który każdy szukałby innego znaku. I tu się pojawia problem, podejrzewam że źle przypisuje zmienną znaku(char znak) do wskaźnika (arg). Program wypluwa
mimo tego że w tekście znajduje się jeden przecinek
#include <windows.h>
#include <process.h>
#include <iostream>
#include <fstream>
using namespace std;
unsigned _stdcall FunkcjaWatku(void * arg)
{
fstream plik;
char c;
int b=0;
char * znak = (char *) arg;
plik.open("plik.txt", ios::in );
if(plik.good() == true)
{
ifstream in("plik.txt");
{
while (!plik.eof() )
{
c=plik.get();
if (c==znak) b++;
}
cout<<"Poszukiwany znak to >>"<<znak<<"<< w tekscie takich znakow znajduje sie : "<<b<<endl;
plik.close();
}
_endthreadex(0);
return 0;
}
};
int main()
{
unsigned IdentWatku[3];
HANDLE hWatki [3];
char w1 = ',';
//char w2[] = ".";
//char w3[] = " ";
hWatki[0] = (HANDLE)_beginthreadex (NULL, 0,&FunkcjaWatku, &w1, 0, &IdentWatku[0]);
//hWatki[1] = (HANDLE)_beginthreadex (NULL, 0,&FunkcjaWatku, &w2, 0, &IdentWatku[1]);
//hWatki[2] = (HANDLE)_beginthreadex (NULL, 0,&FunkcjaWatku, &w3, 0, &IdentWatku[2]);
WaitForMultipleObjects(1, hWatki, TRUE, INFINITE);
CloseHandle (hWatki [0]);
//CloseHandle (hWatki [1]);
//CloseHandle (hWatki [3]);
return 0;
}