wczytywanie tekstu z pliku txt do programu

0

Witam

Mam problem z wczytywaniem tekstu i zapisywaniem go w tablicy. Generalnie program ma wczytać plik txt , wczytać z niego słowa i zapisać go w drzewie. Pomysł jest , gorzej z realizacją.
Jak na razie napisałem tylko żeby wczytywał wyraz , zamieniał małe litery na duże i wrzucał je po kolei do tablicy word[50].

 int main ()
{
	char word[50];
	int c;
	
	FILE *fr;
	if((fr=fopen("pg10.txt","r"))==NULL)
	{
		printf("error\n");
		exit(1);
	}
	
    	while ((c=getc(fr))!=EOF)
        {
		while((c=getc(fr)) && !((c>'a' && c<'z') || (c>'A' && c<'Z')))
			;
		int i=0;
		while((c>'a' && c<'z') || (c>'A' && c<'Z'))
		{
			if (c>'a' && c < 'z')	
				c-= 'a'-'z';
			word[i]=c;
			i++;
			printf("%c",c);
			c=getc(fr);
			
		}
		word[i]='\0';
		
	}
	fclose(fr);


return 0;
}

Gdzie jest problem? Otóż w pętli gdzie powinien wczytywać wyrazy literka po literce program zamiast literek widzi różne symbole (znak zapytania , tylda i.t.p). Jak wrzuci się gdzieś wcześniej przed tą pętlą aby program wypisał literkę to wszystko jest ok , zatem wszystko psuje się w tej pętli.
Z góry dziękuje za pomoc :)

Ps. jakby ktoś doradził oraz wytłumaczył krok po kroczku jak się powinno takie drzewo implementować w c byłbym bardzo wdzięczny (jak działa drzewo wiem , gorzej z tym że jestem słaby z wskaźników i tablic dynamicznych i nie za dobrze się w tym poruszam)

1

Literki psuje linia

c-= 'a'-'z';

Jeśli to miało zamieniać litery z małych na duże, to lepiej użyj po prostu funkcji toupper.
Rzuć też okiem na przykład jak używa się funkcji getc: http://www.cplusplus.com/reference/cstdio/getc - jedno wywołanie getc wczytuje jedną literę, i wystarczy do tego jedna pętla while.

0

Powinno być 'a'-'A' zamiast 'a'-'z'

1
char word[50],char *p;
fscanf(fr,"%49s",word);
for(p=word;*p;++p) *p=tolower(*p);
0

Dzięki wielkie za wszystkie odpowiedzi :)

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