Blad kompilatora przy zapetlaniu

0

Program liczy potencjal grawitacyjny. Jednak mam problem z zapetleniem, zeby liczylo dla kolejnych punktow. Program sie kompiluje, ale przy wlaczeniu sie zawiesza. Poradzi ktos jak to ominac?

 
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define g 9.81 
 
struct punkt{
        int x;
        int y;
        float masa;
};
 
void zapisywanie_do_pliku(float V1) {
    FILE *zapisz;
    zapisz=fopen("wynik.txt","wt");
        fprintf(zapisz,"%.2f\n", V1);
    printf("\nPotencjal zapisano do pliku wynik.txt!\n");
    fclose(zapisz);
}
                                                                                        //  Wzor na potencjal V1(r)=(-gM1)/r1  
int main(){
int dimx, dimy, i, j, p, k, l;
float r1, r2, V1;
int **tablica;
char c;
struct punkt p1, p2, p3;

printf("Podaj dla ilu punktow chcesz policzyc potencjal?\n");
scanf("%d", l);

for(k=0;k<l;k++)
{

do{     
		printf("Potencjal grawitacyjny\n\n");                                                                                               
        printf("Podaj szerokosc tablicy ...wieksza od 1...\n");                                                      
        scanf("%d", &dimx);
        if(dimx<1){
                printf("Szerokosc tablicy nie moze byc mniejsza od 1!\n");
        }
}while(dimx<1);

do{
        printf("Podaj wysokosc tablicy ...wieksza od 1...\n");                                                       
        scanf("%d", &dimy);
        if(dimy<1){
                printf("Wysokosc tablicy nie moze byc mniejsza od 1!\n");
        }
}while(dimy<1);
do{     
        printf("Potencjal grawitacyjny\n\n");
		system("cls");                                                                                                                                 
        printf("Podaj x punktu, w ktorym chcesz policzyc potencjal.\n");
        scanf("%d", &p1.x);
        if(p1.x<0 && p1.x>(dimx)){
                printf("Podany x nie znajduje sie w tablicy!\n");
        }      
}while(p1.x<0 && p1.x>(dimx));
do{
        printf("Podaj y punktu, w ktorym chcesz policzyc potencjal.\n");
        scanf("%d", &p1.y);
        if(p1.y<0 && p1.y>(dimy)){
                printf("Podany y nie znajduje sie w tablicy");
        }      
}while(p1.y<0 && p1.y>(dimy));
 

do{
do{     
        printf("Potencjal grawitacyjny\n\n");
		system("cls");                                                                                                                                    // Pierwsze cialo, wspl x, wspl y, masa
        printf("Podaj x pierwszego ciala.\n");
        scanf("%d", &p2.x);
        if(p2.x<0 && p2.x>(dimx)){
                printf("Podany x nie znajduje sie w tablicy!\n");
        }      
}while(p2.x<0 && p2.x>(dimx));
do{
        printf("Podaj y pierwszego ciala.\n");
        scanf("%d", &p2.y);
        if(p2.y<0 && p2.y>(dimy)){
                printf("Podany y nie znajduje sie w tablicy!\n");
        }      
}while(p2.y<0 && p2.y>(dimy));
if(p2.x==p1.x && p2.y==p1.y){
        printf("Podane x, y pokrywaja sie z pierwszym punktem. Podaj jeszcze raz inne.\n");
}
}while(p2.x==p1.x && p2.y==p1.y);
printf("Podaj mase pierwszego ciala.\n");
scanf("%f", &p2.masa);

do{
do{                   
        printf("Potencjal grawitacyjny\n\n");
		system("cls");                                                                                                                       
        printf("Podaj x drugiego ciala.\n");
        scanf("%d", &p3.x);
        if(p3.x<0 || p3.x>(dimx)){
                printf("Podany x nie znajduje sie w tablicy!\n");
        }      
}while(p3.x<0 && p3.x>(dimx));
do{
        printf("Podaj y drugiego ciala.\n");
        scanf("%d", &p3.y);
        if(p3.y<0 && p3.y>(dimy)){
                printf("Podany y nie znajduje sie w tablicy!\n");
        }      
}while(p3.y<0 && p3.y>(dimy));
if(p2.x==p1.x && p2.y==p1.y){
        printf("Podane x, y pokrywaja sie z pierwszym punktem. Podaj jeszcze raz inne.\n");
}
}while(p3.x==p2.x && p3.y==p2.y);
printf("Podaj mase drugiego ciala.\n");
scanf("%f", &p3.masa);

tablica=(int**)malloc(dimx*sizeof (*tablica));                                    //alokowanie tablicy
        for(i=0; i<dimx; i++){
                tablica[i]=(int *)malloc(dimy * sizeof (**tablica));
}   
printf("Potencjal grawitacyjny\n\n");     
system("cls"); 
printf("\np1x %d p2x %d p1y %d p2y %d\n", p1.x, p2.x, p1.y, p2.y);                                //liczenie R1
r1=sqrt(((p1.x-p2.x)*(p1.x-p2.x))+((p1.y-p2.y)*(p1.y-p2.y)));
printf("\n%f\n", r1);
                                     //liczenie R2
r2=sqrt(((p2.x-p3.x)^2)+((p2.y-p3.y)^2));
printf("\n%f\n", r2);
                                    //liczenie potencjalu w punkcie podanym przez uzytkownika
V1=((-g*p2.masa)/r1)-((g*p3.masa)/r2);
printf("Potencjal w danym punkcie wynosi %f\n\n", V1);
zapisywanie_do_pliku(V1); 
for(i=0; i<dimx; ++i){                                                                                       //zwalnianie pamieci
        free(tablica[i]);
}
free(tablica);
printf("\n\nKONIEC!\n");

getchar();
getchar();
return 0;
}
}

0

Wyrzucić ten kod i napisać od nowa.

1

W scanf() nie dałeś znaku & i to powodowało crashowanie się programu wystarczyło poczytać to https://pl.wikibooks.org/wiki/C/scanf

Tu masz poprawiony troszkę kod i sformatowany http://wklej.to/Lhphd

0

Wiedzialem, ze daje sie &. Po prostu musialem przeoczyc. Dzieki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.