Program pobierający zdania zakończone kropką z jednego pliku i układający je od najkrótszego w drugim

0

Witam, napisałem program i nie wiem czemu od przeglądania tablicy aż do znaku pustego przestaje działać, czy ktoś może powiedzieć dlaczego?

#include <stdio.h>
#include <stdlib.h>

int ilosc_zdan=10;

void przepisz(FILE*,FILE*);
int * powieksztab(int*);

int main(){
	FILE *plik1,*plik2;
	
	plik1=fopen("zdania.txt","r");

	if(plik1==NULL){
		printf("!--Nie moszna otworzyc pliku do odczytu--!");
		return 1;
	}
		
	plik2=fopen("zapis.txt","w");
	
	if(plik2==NULL){
		printf("!--Nie moszna otworzyc pliku do zapisu--!");
		return 1;
	}
		przepisz(plik1,plik2);
		
		return 0;
}

int * powieksztab(int*a){
	int x;
	int * b=(int*)malloc(ilosc_zdan*2*sizeof(int));
	for(x=0;x<ilosc_zdan;x++)
		b[x]=a[x];
	free(a);
	return b;
}

void przepisz(FILE*odczyt,FILE*zapis){
	
	int * x;
	int y=0,z=0,y1=0,x2=0,y2=0,p=0,p1=0;
	x=(int*)malloc(ilosc_zdan*sizeof(int));
	int licznik_zdan=0;
	char ** tab;
	int h,h2;
	
	while(fgetc(odczyt)!=EOF){
		if(y==ilosc_zdan){
			x=powieksztab(x);
		}
		x[y]=0;
		fseek(odczyt,-1,1);
		

			int z;
			while(fgetc(odczyt)!='.'&&fgetc(odczyt)!='?'&&fgetc(odczyt)!='!'&&fgetc(odczyt)!=EOF){
			fseek(odczyt,-4,1);
			z=fgetc(odczyt);
			printf("%c",z);
			x[y]++;
			}
			licznik_zdan++;
			printf("%d\n",x[y]);
		
		y++;
	}
	x[y-1]+=2;
	x[y]='\0';
	licznik_zdan--;
	tab=(char**)malloc(licznik_zdan*sizeof(char*));
	fseek(odczyt,0,0);
        //////////////////////////////////
	//od tego miejsca przestaje dzialac
        //////////////////////////////////
	while(x[y1]!='\0'){
		tab[y1]=(char*)malloc(x[y1]*sizeof(char));
		y1++;	
	}
	
	while(fgetc(odczyt)!=EOF){
		fseek(odczyt,-1,1);
		
			while(fgetc(odczyt)!='.'&&fgetc(odczyt)!='?'&&fgetc(odczyt)!='!'&&fgetc(odczyt)!=EOF){
			fseek(odczyt,-4,1);
			tab[x2][y2]=fgetc(odczyt);
			y2++;
			}
		x2++;
	}
	h=x[0];
	while(x[p]!='\0'){
		p++;
		while(x[p1]!='\0'){
			if(h>x[p1])
				h=x[p1];
				h2=p1;
		p1++;
		}
		fputs(tab[p1],zapis);
	}
}

0

Co mówi debugger?
I co w ogóle ten Twój program ma robić? Bo nazwy zmiennych typu tab czy zapis z jakiegoś powodu wcale nie ułatwiają jego zrozumienia.

0

ja też coś skrobnąłem ale żeby nie był pełny gotowiec to uporzadkować musi sobie kolega sam albo poprawić swoje błędy.

https://ideone.com/q542uy

Pierwszy raz w życiu użyłem ungetc() ; -)))))

Pozdrawiam.

0

faktycznie dobra rada, po porządkach program zaczął działać

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