Program rysujący mapę

Witam, mam do napisania program który rysuję mapę czegośtam :p, współrzędne pobieram z pliku.Nie bardzo wiem gdzie popełniłem błąd, piszę w visual studio 2010. tam jakies smieszne bledy wyskakują i program nie startuje. Może wy coś zaradzicie :smiley:

#include 

#include 

#include 

#include "winbgi2.h"


void main()

{

	graphics(500,500);

		int i;

		int a;

	FILE *f;

		f=fopen("plik1.txt","r");

		fscanf_s(f,"%d",&a);


		if((f == NULL))

    {

        printf("Nie udalo sie otwarcie choc jednego z plikow\n");

        exit(-1);

    }

double *x1;

double *x2;

x1 = ((double*)malloc(a*sizeof(double)));

x2 = ((double*)malloc(a*sizeof(double)));

for(i=0;i
	{

			fscanf(f,"%lf%lf%lf%lf",&x1[i],&x2[i],&x1[i+1],&x2[i+1]);

		line(x1[i],x2[i],x1[i+1],x2[i+1]);


		}

wait();

}[/code]

Ma być albo to:

x1=((double*)malloc(2*a*sizeof(double)));

x2=((double*)malloc(2*a*sizeof(double)));

for(i=0;i
   {

    fscanf(f,"%lf%lf%lf%lf",&x1[2*i],&x2[2*i],&x1[2*i+1],&x2[2*i+1]);

    line(x1[2*i],x2[2*i],x1[2*i+1],x2[2*i+1]);

   }[/code]
 albo to:

[code]x1=((double*)malloc(a*sizeof(double))); x2=((double*)malloc(a*sizeof(double))); for(i=0;i { fscanf(f,"%lf%lf",&x1[i],&x2[i]); if(i) line(x1[i-1],x2[i-1],x1[i],x2[i]); }

W zależności od tego co masz w pliku.

Po pobieżnym przejrzeniu stwierdzam:

Po pierwsze main musi zawsze zwracać int.

Po drugie tablice alokujemy callociem.

Po trzecie w twoim przypadku nie są Ci potrzebne tablice a zamiast nich cztery zmienne: x1, y1, x2, y2

Po czwarte tam chyba ma być fscanf zamiast fscanf_s

Zaczne od końca, visual studio wskazuje fscanf jako błąd i “radzi” mi wpisywanie fscanf_s, niby program działa tak czy tak ale dla przejrzystości późniejszych raportów błędów wybieram fscanf_s. Jak nie tablicami to czym sczytać wartości z pliku, chciałbym żeby było jak najłatwiej :p. Tablice alokujemy mallociem (przynajmniej tak napisał pan W. Regulski w mojej instrukcji). No i doszedłem do początku :smiley: jak zrobić żeby funkcja zwracała int. Alex dzięki za podesłanie kodu, ale nawet jak zamienie to i tak mi wywala, problem leży chyba w tym zwracaniu typu zmiennej ale nie wiem jak to narpawic.

int main()

  {

   ...

   return 0;

  }

Z tym że dopóki nie powiesz o jakie błędy ci chodzi nikt ci nie będzie w stanie pomóc.

Dodane 03.01.2013 (Cz) 2:29

Doprawdy, a wiesz czym się różni od malloc’a?

Owszem calloc zainicjuje pamięc zerami, oraz zaalokuje n bloków pamięci, malloc natomiast zaalokuje jeden duży blok pamięci. Osobiście zawsze inicjuje zmienne wartościami (najczęściej zerami).

Moim zdaniem tablice najlepiej alokować callociem, a struktury mallociem. Ja tak robię ale oczywiście nie jest to obowiązek.

Napisane na szybko:

double x1, y1, x2, y2;

for(i=0;i
   {

     fscanf(f,"%lf%lf",&x2,&y2);

     if(i) line(x1, y1, x2, y2);

     x1 = x2;

     y1 = y2;

   }[/code]

Mniej więcej o to mi chodzi no chyba że w przyszłości planujesz te punkty oprócz rozrysowania do czegoś wykorzystać

Z zerowaniem pamięci trafiłeś zaś z blokami - nie. calloc dokładnie jak malloc rezerwuje jeden duży blok pamięci. Więc jedyna różnica to zerowanie, które w tym przypadku jest absolutnie zbędne.

C Reference się z tobą zgadza.

Mój błąd wynikał z tego, że od jakiegoś roku nie pisałem nic w czystym C. A ostatnio właśnie postanowiłem napisać prosty programik właśnie z wykorzystaniem tablic i gdy miałem sporo błędów to zacząłem je poprawiać w tym zamieniając malloc na calloc, wszystkie błędy zniknęły, a ja nieopatrznie zakodowałem sobie że: Jak tablice to calloc :smiley: Widać błąd był w innych rzeczach i nie zwróciłem na to uwagi.