Czytanie pliku po slowie w C

0

Witam,

mam problem z prostą rzeczą,
mój cel:
czytanie pliku słowo po słowie z uwzględnieniem nowych linii,

robie to tak:

char *getWord(FILE *fp)
{
	int n = 0; 
	char word[100]; 
	int ch; 	

	while(ch = fgetc(fp))
	{
		if(ch == EOF)
			return NULL;
		else if(ch == '\n')
		{	
			word[n++] ='\n';
			break;   		
		}
		else if(ch == ' ')
		{
			word[n++] = ' '; 
			break;
		}		
		else if(isalpha(ch))
			word[n++] = ch;
		else continue;  				
	}
	if(!n) return NULL;
	return strdup(word);
}

mój tekst:

czesc siema
hey
jestem tutaj

wychodzi:

czesc siema
iema hey
a jestem tutaj

Z góry dzięki za pomoc i naukę.

1
char *getWord(FILE *fp)
  {
   size_t size=0; 
   char word[100];
   int ch;     
   while((size+1<sizeof(word))&&(isalpha(ch=fgetc(fp)))) word[size++]=ch;
   word[size]=0;
   return size?strdup(word):NULL;
  }

ale pamiętaj że to jest zły pomysł zwracać coś za co się nie niesie odpowiedzialności.
Radzę jednak:

const char *getWord(FILE *fp)
  {
   static char word[100];
   size_t size=0; 
   int ch;     
   while((size+1<sizeof(word))&&(isalpha(ch=fgetc(fp)))) word[size++]=ch;
   word[size]=0;
   return size?word:NULL;
  }

strdup zastosujesz na zewnątrz, ale takie podejście jest niebezpieczne przy wielowątkowości, więc:

const char *getWord(FILE *fp,char word[],size_t wordsize)
  {
   size_t size=0; 
   int ch;
   while((size+1<wordsize)&&(isalpha(ch=fgetc(fp)))) word[size++]=ch;
   word[size]=0;
   return size?word:NULL;
  }
1

Moze po prostu tak: :P

#include <stdio.h>
int main()
{
    int znak;
    FILE *plik;
    plik = fopen("test.txt", "r");
    znak = getc(plik);
    while(znak != EOF)
    {
        printf("%c", znak);
        znak = getc(plik);
    }
    fclose(plik);
    return 0;
}

Efekt:
user image

0

Zadna odpowiedz nie uwzględnia nowych linii a to jest mój główny problem :) Byłbym również wdzięczny za pokazanie co w moim programie jest nie tak, na logikę powinien działać :)

0
maniaq napisał(a):

Zadna odpowiedz nie uwzględnia nowych linii ...
Na podstawie czego to stwierdziłeś?! Wszystkie podane 5 wersji uwzględniają nowe linii. http://ideone.com/BdFfow

maniaq napisał(a):

... a to jest mój główny problem
Twoim głównym problemem jest brak podstaw, radzę przeczytać byle kurs.

maniaq napisał(a):

Byłbym również wdzięczny za pokazanie co w moim programie jest nie tak, na logikę powinien działać :)
Wywal to i zacznij od nowa.

@maniaq, Podaje to co wymagasz, ale z całą pewnością nie jest to tym czego potrzebujesz, zaś czego potrzebujesz - jeszcze nie zrozumiałeś.
http://ideone.com/dlD9W6

#include <stdio.h>
#include <ctype.h>
int main()
  {
   int ch;
   FILE *plik;
   plik=fopen("test.txt","r");
   while((ch=getc(plik))!=EOF) if((isalpha(ch))||(isspace(ch))) putchar(ch);
   fclose(plik);
   return 0;
  }

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