Witam! Problem jest następujący. Otóż mam zrobić projekt na studia dotyczący punktów wczytywanych z pliku, oraz rysowania linii najlepszego dopasowania. Stworzyłam kod, program (Visual Studio Professional 2013) nie wyrzuca żadnych błędów, jednak uruchomić algorytmu nie chce. Przyznaję że nie jestem zbyt zaawansowana w technice programowania, właściwie to dopiero zaczynam z tym przygodę :D Podejrzewam że problem jest z 'fscanf', jednak nie za bardzo wiem jak to naprawić, byłabym wdzięczna za każdą dobrą sugestię. Poniżej kod, a w załącznikach wrzucę screen błędu, który się pokazuje. Z góry dziękuję :)

#include <stdio.h>
#include<stdlib.h>
#include <math.h>
#include "winbgi2.h"
double srednia(double a[], int n);
double suma(double a[], double b[], int n);
double min(double a[], int n);
double max(double a[], int n);

void main()
{
	printf("Witamy w programie przyblizajacym zadany rozklad punktow na plaszczyznie prosta najlepszego dopasowania\n");
	/*otwiera dwa pliki tekstowe z punktami*/
	FILE *ps;
	FILE *pl;
czytaj:
	fopen_s(&ps, "punktyx.xlsx", "r");
	if (fopen_s(&ps, "punktyx.xlsx", "r") == NULL)
	{
		printf("Nie udalo sie otworzyc pliku\n");
		goto czytaj;
	}
czytaj1:
	fopen_s(&pl, "punktyy.xlsx", "r");
	if (fopen_s(&pl, "punktyy.xlsx", "r") == NULL)
	{
		printf("Nie udalo sie otworzyc pliku\n");
		goto czytaj1;
	}

	int i, n;
	double *xx, *yy;
	void *pxx, *pyy;
	/*deklaracja liczby punktów*/
czytaj2:
	scanf_s("%d", &n);
	if (n > 200)
	{
		printf("Jest tylko 200 punktow, podaj mniejsza liczbe\n");
		goto czytaj2;
	}
	/*deklaracja tablic dynamicznych*/
	pxx = malloc(n*sizeof(double));
	xx = (double*)pxx;
	pyy = malloc(n*sizeof(double));
	yy = (double*)pyy;
	/*wpisuje punkty do tablic*/
	for (i = 0; i < n; i++)
	{
		fscanf_s(ps, "%lf", &xx[i]);
		fprintf(ps, "%d%lf\n", i + 1, xx[i]);
	}
	for (i = 0; i < n; i++)
	{
		fscanf_s(pl, "%lf", &yy[i]);
		fprintf(pl, "%d%lf\n", i + 1, yy[i]);
	}
	double a, b;
	/*liczenie wspolczynnikow a i b do prostej najlepszego dopasowania*/
	a = (suma(xx, yy, n) - n*srednia(xx, n)*srednia(yy, n)) / (suma(xx, xx, n) - n*srednia(xx, n)*srednia(xx, n));
	b = srednia(yy, n) - a*srednia(xx, n);
	/*otwiera i skaluje okno graficzne*/
	graphics(600, 600);
	double xmin, xmax, ymin, ymax;
	xmin = min(xx, n);
	ymin = min(yy, n);
	xmax = max(xx, n);
	ymax = max(yy, n);
	scale(xmin - 15, ymin - 15, xmax + 15, ymax + 15);
	/*rysuje uklad wspolrzednych*/
	line(xmin - 10, 0, xmax + 10, 0);
	line(0, ymin - 10, 0, ymax + 10);
	/*zaznacza punkty krzyzykami na ukladzie wspolrzednych*/
	for (i = 0; i < n; i++)
	{
		line(xx[i] - 3, yy[i], xx[i] + 3, yy[i]);
		line(xx[i], yy[i] - 3, xx[i], yy[i] + 3);
	}
	/*rysuje linie najlepszego dopasowania*/
	line(xmin, a*xmin + b, xmax, a*xmax + b);
	/*liczy odleglosci punktow od prostej*/
	double s, d;
	scanf_s("%lf", &d);
	for (i = 0; i < n; i++)
	{
		s = fabs(a*xx[i] - yy[i] + b) / sqrt(a*a + 1);
		if (s>d)
		{
			circle(xx[i], yy[i], 5);
		}
	}
	wait();
}


double srednia(double a[], int n)
{
	double s;
	int i;
	s = 0;
	for (i = 0; i < n; i++)s = s + a[i];
	s = s / n;
	return s;
}

double suma(double a[], double b[], int n)
{
	double s;
	s = 0;
	int i;
	for (i = 0; i < n; i++)s = s + a[i] * b[i];
	return s;
}

double min(double a[], int n)
{
	double min;
	int i = 0;
	min = a[i];
	for (i = 0; i < n; i++)
	{
		if (a[i + 1] < a[i])min = a[i + 1];
	}
	return min;
}

double max(double a[], int n)
{
	double max;
	int i = 0;
	max = a[i];
	for (i = 0; i<n; i++)
	{
		if (a[i + 1]>a[i])max = a[i + 1];
	}
	return max;
}